Vector,array,传统数组速度的比较

-1:特别鸣谢

@L_T_F_:提供Windows下的debug和release的数据
@东北小蟹蟹:提供Linux下的数据


0:一些声明

  1. 作者的电脑信息:
    message

  2. 这篇文章所用的IDE:VS2019最新版

  3. VS2019所建立的项目:控制台项目

  4. linux下的测试由@东北小蟹蟹 提供,感谢。

  5. 本文提到的所有数据均为5次试验

  6. 所有的平均值均检验过

  7. 本位作者并无挑拨离间的意思,只是一时兴起想做个测试

  8. 如果哪里有问题,请在下边留言~


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];//真·我只是访问一下

其中,xxxunsigned 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{方括号数组}<array<vector\)

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

这里arrayvector其实也不分上下,但是方括号带来的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

传统数组依然是很快的,这个时候arrayvector来开差距了~

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.141 0.923 0.847
最小值 0.970 0.703 0.719
posted @ 2020-05-07 10:59  SD!LTF  阅读(152)  评论(0编辑  收藏