遍历二维数组时,常规思路是使用一个嵌套循环。一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层。另一方面,由于二维数组是按行存储的,因此遍历二维数组时,一般将列循环放在内层。但当数组的行数rowSize大于数组的列数columnSize时,这两条规律无法同时得到满足。下面通过一个小测试来判断这个时候哪种方式效率更高。
[code]#include #include using namespace std;const int rowSize = 50000;const int columnSize = 2000;const int testCount = 100;int main(){ //生成大型二维数组 int** arr = new int * [rowSize]; for (int i = 0; i < rowSize; i++) { arr = new int[columnSize]; for (int j = 0; j < columnSize; j++) { arr[j] = rand() % 5; } } //声明工具变量 double meanTime = 0; long double sum = 0; clock_t start, end, time; //将列循环放在内层,进行多次测试 time = 0; for (int k = 0; k < testCount; ++k) { sum = 0; start = clock(); for (int i = 0; i < rowSize; ++i) { for (int j = 0; j < columnSize; ++j) { sum += arr[j]; } } end = clock(); sum = sum / (rowSize * columnSize); time += end - start; } meanTime = (double) time / testCount / CLOCKS_PER_SEC; cout |