我有一个3维的boost::multi_array
代表2d瓷砖地图层。我希望能够清除一层 - 又名迭代所有瓷砖并将其值设置为0,但我无法弄清楚如何做到这一点 - 我相信我必须使用视图,但文档不会'对我来说很有意义。例如,在查看此示例代码时:Boost multi_array Views
// myarray = 2 x 3 x 4
//
// array_view dims: [base,bound) (dimension striding default = 1)
// dim 0: [0,2)
// dim 1: [1,3)
// dim 2: [0,4) (strided by 2),
//
typedef boost::multi_array_types::index_range range;
// OR typedef array_type::index_range range;
array_type::array_view<3>::type myview = myarray[ boost::indices[range(0,2)][range(1,3)][range(0,4,2)] ];
for (array_type::index i = 0; i != 2; ++i)
for (array_type::index j = 0; j != 2; ++j)
for (array_type::index k = 0; k != 2; ++k)
assert(myview[i][j][k] == myarray[i][j+1][k*2]);
boost::indices
如何工作?这些范围甚至代表什么?对不起,如果这是显而易见的,我只是无法得到它的窍门。
在此先感谢,ell。
是否有内置的方式来提取子数组的副本?也就是说,不是使用相同数据的视图,而是实际复制数据,而无需手动迭代视图的相应索引和新的multi_array? – 2016-02-22 14:45:44