在给定维数和每个变量的大小的情况下,如何迭代 n 维数组?
int n;
int size[n];
由于维数不固定,我不能为每个维写一个嵌套循环。我需要代码来处理每个维度。
此外,无论实际数据存储在 n 维数组还是包含大行中所有数据的平面数组中,都没有关系。两者都可以接受。
int data[16][42][14]; // n-dimensional array
int data[16 * 42 * 14]; // flat array containing the same data
最佳答案
您可以使用递归,为每个维度“猜测”其索引并递归调用一个较小的问题,类似于(伪代码):
iterate(d,n,size,res):
if (d >= n): //stop clause
print res
return
for each i from 0 to size[d]:
res.append(i) //append the "guess" for this dimension
iterate(d+1,n,size,res)
res.removeLast //clean up environment before next iteration
哪里:
d
为当前访问的维度size
,n
为输入res
是表示当前部分结果的向量
调用 iterate(0,n,size,res)
,其中 res
被初始化为一个空列表。
C++ 代码应该是这样的:
void iterate(int d,int n,int size[], int res[]) {
if (d >= n) { //stop clause
print(res,n);
return;
}
for (int i = 0; i < size[d]; i++) {
res[d] = i;
iterate(d+1,n,size,res);
}
}
完整代码和简单示例可在 ideone 上获得
关于arrays - 如何遍历 n 个维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040260/