C++ 性能小测 1 二维数组的遍历效率
2022/8/29 1:22:54
本文主要是介绍C++ 性能小测 1 二维数组的遍历效率,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++ 性能小测 1 二维数组的遍历效率
遍历二维数组时,常规思路是使用一个嵌套循环。一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层。另一方面,由于二维数组是按行存储的,因此遍历二维数组时,一般将列循环放在内层。但当数组的行数rowSize
大于数组的列数columnSize
时,这两条规律无法同时得到满足。下面通过一个小测试来判断这个时候哪种方式效率更高。
#include <iostream> #include <ctime> 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[i] = new int[columnSize]; for (int j = 0; j < columnSize; j++) { arr[i][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[i][j]; } } end = clock(); sum = sum / (rowSize * columnSize); time += end - start; } meanTime = (double) time / testCount / CLOCKS_PER_SEC; cout << "列循环放在内层平均耗时" << meanTime << "秒,平均值为" << sum << endl; //将列循环放在外层,进行多次测试 time = 0; for (int k = 0; k < testCount; ++k) { sum = 0; start = clock(); for (int j = 0; j < columnSize; ++j) { for (int i = 0; i < rowSize; ++i) { sum += arr[i][j]; } } end = clock(); sum = sum / (rowSize * columnSize); time += end - start; } meanTime = (double) time / testCount / CLOCKS_PER_SEC; cout << "列循环放在外层平均耗时" << meanTime << "秒,平均值为" << sum << endl; //释放大型二维数组内存 for (int i = 0; i < rowSize; i++) delete[] arr[i]; delete[] arr; system("pause"); return 0; }
测试输出如下:
列循环放在内层平均耗时0.42657秒,平均值为1.99975 列循环放在外层平均耗时1.35246秒,平均值为1.99975 请按任意键继续. . .
由此可得:使用嵌套循环遍历二维数组时,将列循环放在内层运行效率更高,即使所遍历的二维数组行数远大于列数。
这篇关于C++ 性能小测 1 二维数组的遍历效率的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!