vector與list的區別

2021-06-03 17:42:38 字數 2251 閱讀 4364

vector與list差異點與優缺點

(1)vector動態增長:不是隨著每個元素的插入而自己增長的。預先存了一些儲存區,使得實際分配的空間比當前所需的空間多一些,而list 表示非連續的記憶體區域,並通過一對指向首位元素的指標雙向鏈結起來,因而可以兩個方向進行遍歷。

(2)當從vector末端刪除元素的時候,效能與list差不多,當從前面或者中間刪除元素的時候,list列表效能要好得多,原因是vector需要進行元素的移動。

(3)當要隨機訪問元素時,vector效率更高點。

(4)對於小的基本資料型別,插入100000個元素,vector效能要好。

(5)對於大的復合資料型別,比如類,插入100000個元素,list效能要好,因為vector需要重新分配記憶體,並且需要拷貝舊的記憶體區域,還必須呼叫拷貝建構函式與賦值建構函式。所以效率要低很多

(6)當插入大型資料型別時,用指標間接儲存,效能會好很多

(7)已知需要儲存的元素時,vector要好

(8)如果需要任意位置插入元素,list要好

驗證**

(1)vector插入200萬資料,遍歷滿足某種條件時,進行刪除,刪除200萬資料需要花費幾十分種,提高方法為,找到第乙個需要刪除,和最後乙個需要刪除的元素(前提保證第乙個需要刪除與最後乙個需要刪除的中間是線性關係,也可以刪除)。然後再進行刪除。當資料量不大或者需要大量隨機訪問元素時,使用vector.

#include "stdafx.h"

#include#include#include#include#includeusing namespace std;

typedef struct stu

stu;

char *getcurrenttime(char *azp_currenttime)

int main(int argc, char* argv)

; char endtime[20]=;

stu a;

for (long i = 0;i < 2000000;i++)

getcurrenttime(begintime);

printf("begintime=%s\n",begintime);

vector::iterator iter = v1.begin();

for(;iter != v1.end();)

++iter;

}

getcurrenttime(endtime);

printf("endtime=%s\n",endtime);

printf("after clear v1 size=%ld",v1.size());

return 0;

}

(2)list插入200萬資料,遍歷滿足某種條件時,進行刪除,刪除200萬資料需要花費大約3秒鐘。效率差距實在有點大!當需要遍歷整個列表進行比較判斷,而不是找某個具體的資料,並且需要定時刪除時,應該使用list,比如重單判斷。需求為當進行話單預處理時,需要進行重單判斷,那麼必須保留之前預處理的話單記錄,直到超過保留時間才刪除。這個時候每次預處理的時候,都要遍歷該列表。根據重單條件進行判斷。當超過保留時間時,需要刪除話單超過保留時間的記錄,如果這個時候採集vector,無疑會影響到批價時間,阻塞流程。

#include "stdafx.h"

#include

#include

#include

#include

#include

using namespace std;

typedef struct stu

stu;

char *getcurrenttime(char *azp_currenttime)

int main(int argc, char* argv)

;char endtime[20]=;

stu a;

for (long i = 0;i < 2000000;i++)

getcurrenttime(begintime);

printf("begintime=%s\n",begintime);

list::iterator iter = v1.begin();

for(;iter != v1.end();)

++iter;

}getcurrenttime(endtime);

printf("endtime=%s\n",endtime);

printf("after clear v1 size=%ld",v1.size());

return 0;

}

vector與list的區別

vector 連續儲存的容器,動態陣列,在堆上分配空間 底層實現 陣列 兩倍容量增長 vector 增加 插入 新元素時,如果未超過當時的容量,則還有剩餘空間,那麼直接新增到最後 插入指定位置 然後調整迭代器。如果沒有剩餘空間了,則會重新配置原有元素個數的兩倍空間,然後將原空間元素通過複製的方式初始...

vector與list的區別

1 vector vector的底層實現是陣列,它擁有一段連續的記憶體空間,並且起始位址不變,因此訪問的效率較高。由於他的記憶體空間是連續的,所以在中間進行插入和刪除的操作時,會造成記憶體塊的拷貝,在空間不夠的情況下,需要申請一塊最夠大的記憶體並進行記憶體的拷貝,也是基於這也原因,在vetcor的插...

vector與list的區別

vector為儲存的物件分配一塊連續的位址空間,因此對vector中的元素隨機訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現有元素進行複製,移動。如果vector中儲存的物件很大,或者建構函式複雜,則在對現有元素進行拷貝時開銷較大,因為拷貝物件要呼叫拷貝建構函式。對於簡單的小物件,v...