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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM