如何遍历boost :: multi_array

Jon*_*now 7 c++ boost iterator boost-multi-array multidimensional-array

我一直在研究boost :: multi_array库,寻找一个迭代器,它允许你在一个for循环中遍历整个 multi_array.

我不认为该库中有任何这样的迭代器.(在那里找到的迭代器允许您遍历multi_array的单个维度)

我错了吗?
如果没有,是否有任何库定义这样的迭代器?

进入细节,我想写一些类似的东西:

boost::multi_array< double, 3 > ma(boost::extents[3][4][2]);  

for( my_iterator it = ma.begin(); it != ma.end(); ++it )  
{  
    // do something  
    // here *it has element type (in this case double)  
}  
Run Code Online (Sandbox Code Playgroud)

并获得一个重复3x4x2次的循环

Maa*_*ten 10

您可以使用std::for_eachfrom 的实现<algorithm>来访问每个元素.Boost文档中有一个例子

另外,您也可以使用array::origin()array::num_elements()如下:

boost::multi_array< double, 3 > ma(boost::extents[3][4][2]);  

for(auto i = ma.origin(); i < (ma.origin() + ma.num_elements()); ++i)  
{  
    // do something with i
}  
Run Code Online (Sandbox Code Playgroud)

  • 我相信你想要ma.data()而不是ma.origin()来获得具体的boost :: multi_array和boost :: multi_array_ref类.origin()将为非零index_bases()做错误的事情,而data()将正常工作. (6认同)