我找到了 this有关如何快速遍历多维数组的文章。
我正在使用方法 6:使用线性数组和单递增索引的嵌套循环。
它说 方法 8:使用线性数组和递增索引的单循环
更快,但我也需要嵌套循环索引。当我尝试通过 if 子句计算嵌套循环索引时,我的代码变慢了(至少比嵌套循环方法更糟糕)。
您能推荐一些计算个人指数的方法吗?
int x1=0,x2=0;
for (int i1 = 1; i1 <= 10000; i1++){
for (int i = 0; i < 10000; i++){
x1++;
if(x1>=100){
x1=0;
x2++;
}
if (x1 > 10)
{
a[i] += a[i - 10*1];
}
if (x2 < 95)
{
a[i] += a[i + 5*100];
}
}
}
对于多维数组结构a[x1][x2]
。我想计算
a[x1][x2]=a[x1-10][x2]+a[x1][x2+5]
a[x1][x2]
是转换为 a[x1+x2*100]
method 8: 462 ns
method 6 297 ns
有什么方法可以提高这段代码的速度吗?
最佳答案
您使用了错误的索引,它应该是 a[ROWS][COLS]
和索引 i = row * COLS + col
。
那么你不需要内循环中的if
,你可以这样写:
double *v = a + 1000; // destination
double *c = a; // source is 10 rows before, using another pointer
// to take advantage of proximity in cache
for( x1 = 10; x1 < 100; x1++ ) {
for( int x2 = 0; x2 < 95; x2++) {
*v += *c + *(v + 5);
++v;
++c;
}
v += 5; // skip the last 5 columns
c += 5;
}
使用您发布的链接中的在线编译器,这给我一个 ~130 的结果
关于c++ - 循环遍历多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070602/