可能重复:
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];
}
}
}
答案 0 :(得分:2)
这是因为处理器缓存数据,而int array[n][m][k]
之类的数组在内存中表示,首先是元素array[0][0][0]
到array[0][0][k - 1]
,依此类推。因此,如果您在第一个示例中进行迭代,处理器可以在缓存中加载整块内存,但在第二个示例中,处理器无法复制“通过”内存。