-1:特别鸣谢
@L_T_F_:提供 Windows 下的 debug 和 release 的数据
@东北小蟹蟹:提供 Linux 下的数据
其他阅读链接:https://www.cnblogs.com/sdltf/p/12841544.html
0:一些声明
作者的电脑信息:
这篇文章所用的 IDE:VS2019 最新版
VS2019 所建立的项目:控制台项目
linux 下的测试由 @东北小蟹蟹 提供,感谢。
本文提到的所有数据均为 5 次试验
所有的平均值均检验过
本位作者并无挑拨离间的意思,只是一时兴起想做个测试
如果哪里有问题,请在下边留言~
1:为什么要写这篇文章
@L_T_F_一天跟我发了一段 QQ 聊天的截图,具体内容是关于 vector 和数组的运行速度的争论。
我一时也觉得很好玩,这里还是不不放上聊天截图了。
于是,这篇文章就诞生了。
2:准备工作
本次分为两种方式判定速度:
– Debug 模式
– Release 模式
每个模式下会有四个不同的测试方式,分别为:
– 循环赋值
– 加法运算
– 乘法运算
– 随机访问
测评之前并没有考虑到除法和%,但是好像这两个是更慢的……
测评也没有考虑到位运算,因为位运算挺快的。
如果你有兴趣你也可以试试。
他们对应的代码分别为:
for(int i = 0;i < n;i ++) xxx[i] = 0;
for(int i = 1;i < n;i ++) xxx[i] = xxx[i-1]+rand()%10;
for(int i = 1;i < n;i ++) xxx[i] = xxx[i-1]*rand()%10;
for(int i = 0;i < n;i ++) xxx[i];//真·我只是访问一下
其中,xxx 为 unsigned long long 类型,$n = (1e5)^2$
注:数组大小只有 $1e5$,这里的 $n$只是循环次数。
时间单位:s
储存时间的数据类型:long double
小数位数:四舍五入到第三位
rand:并没有随机数种子
3:在 Windows 下
3.1.2:Debug 下的赋值
Debug 下的赋值所需时间:
项目
传统数组
vector
array
第一次
0.008
0.091
0.089
第二次
0.007
0.167
0.075
第三次
0.006
0.165
0.093
第四次
0.006
0.070
0.079
第五次
0.006
0.119
0.075
平均值
0.066
0.122
0.082
最大值
0.008
0.167
0.093
最小值
0.007
0.070
0.075
从这里可以看出,所需时间 $\texttt{方括号数组} 3.1.2:Release 下的赋值 讲道理让我吃了一惊 项目 传统数组 vector array 第一次 0.000 0.000 0.000 第二次 0.000 0.000 0.000 第三次 0.000 0.000 0.000 第四次 0.000 0.000 0.000 第五次 0.000 0.000 0.000 平均值 0.000 0.000 0.000 最大值 0.000 0.000 0.000 最小值 0.000 0.000 0.000 讲道理,我怀疑我电脑出了问题…… 3.2.1:Debug 下的加法运算 如下表: 项目 传统数组 vector array 第一次 0.116 0.205 0.131 第二次 0.069 0.182 0.184 第三次 0.079 0.150 0.151 第四次 0.097 0.156 0.130 第五次 0.077 0.155 0.185 平均值 0.087 0.169 0.156 最大值 0.116 0.205 0.185 最小值 0.097 0.155 0.130 这个时候,传统方括号数组依然遥遥领先,vector 略逊色于 array 3.2.2:Release 下的加法运算 如下表,来吧,传说中的 0ms…… 项目 传统数组 vector array 第一次 0.000 0.004 0.005 第二次 0.000 0.005 0.007 第三次 0.000 0.005 0.006 第四次 0.000 0.007 0.005 第五次 0.000 0.006 0.005 平均值 0.000 0.005(0.0054) 0.006(0.0056) 最大值 0.000 0.007 0.007 最小值 0.000 0.004 0.005 这里 array 和 vector 其实也不分上下,但是方括号带来的 0ms 的确是杠杠滴…… 3.3.1:Debug 下的乘法运算 差距逐渐的拉开了: 项目 传统数组 vector array 第一次 0.067 0.923 0.719 第二次 0.700 0.788 0.847 第三次 0.673 0.791 0.781 第四次 0.829 0.812 0.821 第五次 0.510 0.703 0.785 平均值 0.676 0.803 0.790 最大值 0.829 0.923 0.847 最小值 0.067 0.703 0.719 传统数组依然是很快的,这个时候 array 和 vector 来开差距了~ 3.3.2:Release 下的乘法运算 项目 传统数组 vector array 第一次 0.097 0.923 0.719 第二次 0.070 0.788 0.847 第三次 0.123 0.791 0.781 第四次 0.141 0.812 0.821 第五次 0.770 0.703 0.785 平均值 0.240 0.803 0.790 最大值 0.770 0.923 0.847 最小值 0.070 0.703 0.719