关于vector的小测试
今天突然发现自己是个大杀软。。。
起因
在LeetCode上写题,想了半天毫无头绪,遂翻题解,恍然大悟,直呼妙哉😆
按照题解思路快速完成代码并提交,击败了50%多点的选手🤨
然而点开击败了99%选手的提交代码,发现和题解也是一样思路,遂百思不得其解😕
发现99%代码还使用了我认为奇慢无比的下标直接访问vector
元素!?
想当年我了解到使用iterator
遍历vector
后便为这种看起来很高大上的方法所折服并沿用至今,面对着“三观”尽碎的可能,上网查资料得知:下标直接访问的确比iterator
更快!!
但是。。。毕竟实践是检验真理的唯一标准,我决定再自己试试(临死挣扎)。。。
测试
分成3组:
- 直接用下标
index
- 迭代器
iterator
- C++11中的新特性
foreach
网上查阅资料得知,iterator
访问有几种优化方法:
- 使用后自增
- 常量迭代器
- 提取
vector.end()
首先是代码:
1 | // 编译器命令 -static-libgcc -lpsapi |
每组实验测20次,取平均值
结果
时间单位都是毫秒
无优化
Count | Index | Iterator | ForEach |
---|---|---|---|
412496532 | 437.699 | 2162.42 | 1989.42 |
119216746 | 179.232 | 1095.75 | 638.162 |
495923606 | 742.139 | 4560.92 | 2651.87 |
931352601 | 1391.1 | 8568.66 | 4993.88 |
26313293 | 39.5728 | 241.531 | 140.297 |
552602825 | 1135.94 | 5075.68 | 2957.53 |
745457912 | 1437.66 | 6843.82 | 3985.57 |
213446826 | 319.521 | 1965.62 | 1140.39 |
119067789 | 177.646 | 1094.69 | 635.889 |
188234190 | 280.416 | 1733.99 | 1007.83 |
728322180 | 1091.2 | 6685.73 | 3914.53 |
841381042 | 1265.75 | 7732.66 | 4507.66 |
361173914 | 542.042 | 3323.2 | 1935.33 |
270545070 | 403.941 | 2487.95 | 1447.04 |
12213090 | 18.1363 | 114.191 | 72.117 |
386551741 | 692.889 | 3559.2 | 2071.83 |
96517083 | 144.475 | 887.358 | 514.5 |
318260028 | 475.689 | 2927.36 | 1701.81 |
467059067 | 697.862 | 4297.45 | 2493.89 |
416695198 | 622.697 | 3830.22 | 2224.67 |
平均值:
Index | Interator | ForEach |
---|---|---|
604.781 | 3459.42 | 2051.21 |
100% | 572% | 339% |
每组20次的数据量都是一样,下面直接放平均值
迭代器后自增(++it)
Index | Iterator | For |
---|---|---|
675.051 | 3299.05 | 2428.63 |
100% | 489% | 360% |
常迭代器后自增(const_iterator,++it)
Index | Iterator | For |
---|---|---|
874.831 | 4232.79 | 2428.63 |
100% | 539% | 309% |
我的评价是,没杀软用
提取
vector.end()
,后自增
Index | Iterator | For |
---|---|---|
512.14 | 1625.49 | 1695.14 |
100% | 317% | 331% |
提取
vector.end()
,后自增 + O3优化
Index | Iterator | For |
---|---|---|
2e-5 | 1287.46 | 1430.17 |
100% | 6.4373e9% | 7.15085e9% |
Index
杀疯了
总结
没什么好说的,我是大杀软,Index
薄纱好吧,我的 Iterator
😭😭😭
没经过优化前直接被Index
和ForEach
双双薄纱,开满优化才和ForEach
差不多快😭😭😭
然后Index
经过O3优化甚至能恐怖到0ms??!😲😲😲
我的评价是:wyx是纯纯的小丑🤡🤡🤡
wyx自从学了iterator
之后如得灵丹妙药,在坚信用iterator
速度薄纱下标访问的无厘头良好自我感觉的陶醉下,直到今天为止他只要用到vector
必用iterator
🤡🤡🤡
不说了,iterator
,再见!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yan2u's Blog!