三维数组索引上的迭代器

时间:2014-03-14 09:10:23

标签: c++ 3d iterator

我正在编写处理3d中网格化数据的代码(boost :: 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,似乎正确编写迭代器代码是一项艰巨的任务。

2 个答案:

答案 0 :(得分:0)

一种选择是使用迭代器模式。您可以查看link。您可以考虑为每个维度设置迭代器并迭代它们。您还可以考虑将operator ()作为参数传递给迭代器类并执行所需的操作。

答案 1 :(得分: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,这很容易。