MultiArray有很多优点。但是,我觉得BOOST中的MultiArray感觉不舒服的一件事是创建一个可以轻松改变其大小的多阵列并不容易。我有以下代码来说明我的观点:
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> >
在上面的代码中所做的那样。
答案 0 :(得分:1)
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获得显着的性能提升::阵列&LT;&GT;有时,但是YMMV