有没有简单的方法来动态增加 boost::multi_array 维度

Are there easy ways of increasing boost::multi_array dimension dynamically?

本文关键字:multi array 维度 boost 增加 简单 方法 动态 有没有      更新时间:2023-10-16

与使用 std::vector 创建多数组相比,boost 中的 MultiArray 具有很多优势。但是,我对 BOOST 中的多阵列感到不舒服的一件事是,创建一个可以轻松更改其大小的多阵列并不容易。我有以下代码来阐明我的观点:

vector<vector<int> > my_2d_array;
vector<int> temp;
temp.push_back(3);
temp.push_back(4);
my_2d_array.push_back(temp);
temp.clear;
temp.push_back(4);
temp.push_back(5);
my_2d_array.push_back(temp);
temp.clear;
temp.push_back(41);
temp.push_back(51);
my_2d_array.push_back(temp);

从上面的代码中我们可以看到,使用vector<vector<int> >数据结构,我们可以很容易地增加多数组的维度。但是使用 boost::multi_array,您必须使用boost::extents来确定多数组的维度,然后再使用它。我想知道 boost::multi_array 是否也像上述代码中的vector<vector<int> >那样轻松增加其维度。

myarray.reshape(extents[newSizeY][newSizeX]);

工程。顺便说一句,你不能做这样的事情

boost::multi_array<int,2> foo;
// Reshape first before the following call
foo = some_function_that_returns_multi_array()

这让我抓了好几次。你必须重塑

使用 multi_array 的优点是数据存储在一个连续的块中,这有助于更好的缓存局部性,但在"实际"测试中,我注意到有时使用简单的 std::array<> 仍然可以获得显着的性能改进,但是 YMMV