c 陣列和 vector訪問執行效能比較

2021-10-08 11:03:14 字數 2616 閱讀 5490

最近在刷leetcode時,發現對一組資料頻繁操作,陣列的效率比 vector快很多,讓習慣用vector的我著實有點懵,於是做了一下實驗

首先,我在win10上用vs2015,將陣列和vector分別對陣列進行10萬次操作,結果很明顯。

下面是執行**:

#include

#include

#include

< vector >

#include

< algorithm >

#include

< string >

using

namespace std;

intmain()

dword end_time2 =

gettickcount()

; cout <<

"array run time is "

<<

(end_time2 - start_time2)

<<

"ms."

<< endl;

dword start_time1 =

gettickcount()

; vector<

int>

vect

(10000);

for(

int i =

0; i <

100000

; i++

) dword end_time1 =

gettickcount()

; cout <<

"vector run time is "

<<

(end_time1 - start_time1)

<<

"ms."

<< endl;

system

("pause");

return0;

}

耗時的主要方面是訪問速度,可以把迴圈中的計算改為訪問(注釋有),結果也是差不多。

我們把資料調到100萬,結果是:

調到1000萬

windows上執行,次數越大,差距越大,可能跟編譯環境和電腦配置有關。

下面,我們再linux上進行操作,結果如下:

對陣列和vector分別執行1000萬

再調到1億次:

可能是雲伺服器,比較強大的原因,差距並不是很明顯.

執行**如下:

#include

#include

//#include< algorithm >

#include

#include

#include

#include

#include

using

namespace std;

intgettime()

intmain()

int end_time2 =

gettime()

; std::cout <<

"array run time is "

<<

(end_time2 - start_time2)

<<

"ms."

<< endl;

vector<

int>

vect

(10000);

int start_time1 =

gettime()

;for

(int i =

0; i <

100000000

; i++

)int end_time1 =

gettime()

; std::cout <<

"vector run time is "

<<

(end_time1 - start_time1)

<<

"ms."

<< endl;

return0;

}

由上可見,在對資料進行頻繁訪問執行操作時,陣列比vector優秀很多。

但是,這不是說陣列一定比vector好,vector擁有很多強大的功能,可以儲存很多種型別,相比之下陣列還是太單一了點,如果只是對一組資料進行簡單的頻繁訪問執行操作,可以c++陣列,否則大多數情況都還是使用c++的vector。

c 中的array陣列和vector陣列

我覺得實驗一下會記得比較牢,話不多直接上 下面是array陣列,感覺用的不多。cpp 風格陣列 array include include include using namespace std intmain for int i 0 i myint.size i size 獲取長度,vector也...

C 陣列定義和訪問

一 陣列定義和初始化 1 一維陣列初始化 2 標準方式一 int value 100 value i 的值不定,沒有初始化3 標準方式二 int value 100 value 0 和value 1 的值分別為1和2,而沒有定義的value i 1 4 則初始化為05 指標方式 int value ...

C 中vector容器與C風格陣列的訪問效率對比

在leetcode演算法題中,我發現了不同型別的vector容器訪問速度有顯著差異,於是進一步想探索vector容器與傳統c風格陣列之間的的訪問速度差異。我編寫了乙個簡單的測試用例,在vs2017環境下測試,如下 include include include using namespace std...