【问题标题】:iterator over 3d array indices3d 数组索引上的迭代器
【发布时间】:2014-03-14 09:10:22
【问题描述】:

我正在编写处理 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 ,看来正确编写迭代器代码是一项艰巨的任务。

【问题讨论】:

    标签: c++ 3d iterator


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果你继续使用这个

      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代替,这很简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 2010-11-21
        • 2014-07-09
        • 1970-01-01
        相关资源
        最近更新 更多