Possible Duplicate:
Accessing elements of a matrix row-wise versus column-wise
在 C++ 中,为什么像这样迭代多维数组会更有效:
// Iterate through the highest dimention last (k)
int num[10][10][10];
for(int i = 0; i < 10; ++i)
{
for(int j = 0; j < 10; ++j)
{
for(int k = 0; k < 10; ++k)
{
cout << num[i][j][k];
}
}
}
比这样:
// iterate through the highest dimension first (k)
int num[10][10][10];
for(int k = 0; k < 10; ++k)
{
for(int j = 0; j < 10; ++j)
{
for(int i = 0; i < 10; ++i)
{
cout << num[i][j][k];
}
}
}
最佳答案
这是因为处理器缓存了数据,以及像 int array[n][m][k]
这样的数组在内存中表示,因此,首先有元素 array[0][0][0]
至array[0][0][k - 1]
等等。因此,如果您像第一个示例中那样进行迭代,处理器可以将整 block 内存加载到缓存中,但在第二个示例中,处理器无法“通过”内存进行复制。
关于c++ - 多维数组迭代效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11051765/