2014-03-14 59 views
1

我写代码处理栅格数据在3D(升压:: multi_array中和vtkImageData)。我发现我有嵌套循环迭代器在三维数组索引

for(int i=0; i<shape[0]; i++){ 
    for(int j=0; j<shape[1]; j++){ 
     for(int k=0; k<shape[2]; k++){ 
     /* ... */ 
     } 
    } 
} 

在我的代码更经常比我审美喜欢;什么是写这个使用迭代器拿在固定大小的数组(如boost::array)三个指数的正确方法?

的目标是写一个类似于:

for(boost::array<int,3> ijk: GridIndicesIterator(shape)){ ... } 

的boost :: multi_array中允许通过元素迭代,但3D指数必须明确回算。我也看过boost :: iterator,看起来正确编写迭代器代码是一件很有意义的事情。

回答

0

一种选择是使用迭代器模式。你可以检查这个link。您可以考虑为每个维度添加迭代器并遍历它们。您也可以考虑将operator()作为参数传递给迭代器类并执行所需的操作。

0

如果继续使用这个

for(int i=0; i<shape[0]; i++){ 
    for(int j=0; j<shape[1]; j++){ 
     for(int k=0; k<shape[2]; k++){ 

模式的时候,你可以尝试使用的#define,而不是这是很容易。