我想在3d网格中连续(盒形)区域区域的单元索引,即3d集{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
坐标类。我也可以使用任何升级库。)
答案 0 :(得分:0)
一种方法是将3个fors包装到算法for_each_3d中并将其传递给lambda,但它只适用于3d并且访问相邻元素会很麻烦。或者您可以使用boost_mutli数组和循环类似于: how to traverse a boost::multi_array 注意,multi_array是一个数组,在构造之后无法调整大小
答案 1 :(得分: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;
}
}
}
}
但是不要说我告诉你它看起来很棒! ;)