9

我一直在研究 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)  
}  

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

4

1 回答 1

11

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

或者,您可以使用array::origin()andarray::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
}  
于 2011-04-06T20:34:28.930 回答