0

3D グリッド、つまり 3D セット 内の連続した (ボックス型の) エリア area のセル インデックスが必要{iMin…iMax}×{jMin…jMax}×{kMin…kMax}です。単純なアプローチは次のようになります。

for(int i=iMin; i<=iMax; i++){
  for(int j=jMin; j<=jMax; j++){
    for(int k=kMin; k<=kMax; k++){
      // ...
    }
  }
}

ネストされたループなしで、それを行うためのより冗長な方法はありますか?

(私はc ++ 11を使用しており、Vector3i座標用のクラスを持っています。ブーストライブラリも使用できます。)

4

2 に答える 2

0

単一のループが必要な場合は、次のようなものを使用できます。

int main()
{
  size_t const N=8, M=N*N*N;
  size_t x(0), y(0), z(0);
  for (size_t i=0; i<M; ++i)
  {
    std::cout << x << ", " << y << ", " << z << std::endl;
    ++z;
    if (z == N)
    {
      z=0;
      ++y;
      if (y == N)
      {
        y=0;
        ++x;
      }
    }
  }
}

しかし、私はそれがよさそうだと言ったと言わないでください !;)

于 2013-07-10T09:17:50.520 に答える