c++ - 循环遍历多维数组

标签 c++ arrays loops multidimensional-array

我找到了 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]

Program code

 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/

相关文章:

c++ - 我如何正确地重载新的?

javascript - 数组的复杂问题

c - 如何去掉这个程序中的垃圾字符?

string - Scala:如何计算某个索引中唯一项的出现次数?

javascript - Parse.com CloudCode 是否处理 response.success() 之后的代码?

c++ - 为什么指针成员初始化为非零?

c++ - C++ 中的 strcat 函数

c++ - 使用 Qt 播放 *.avi 文件

arrays - bash:如何根据模式从数组中删除元素

java - 如何迭代语句中的值?