vector與list的區別

2022-03-27 22:33:04 字數 858 閱讀 5384

vector為儲存的物件分配一塊連續的位址空間,因此對vector中的元素隨機訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現有元素進行複製,移動。如果vector中儲存的物件很大,或者建構函式複雜,則在對現有元素進行拷貝時開銷較大,因為拷貝物件要呼叫拷貝建構函式。對於簡單的小物件,vector的效率優於list。vector在每次擴張容量的時候,將容量擴充套件2倍,這樣對於小物件來說,效率是很高的。

list中的物件是離散儲存的,隨機訪問某個元素需要遍歷list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改變元素的指標。

綜上所述:

vector適用:物件數量變化少,簡單物件,隨機訪問元素頻繁

list適用:物件數量變化大,物件複雜,插入和刪除頻繁

最大的區別是,list是雙向的,而vector是單向的。

因此在實際使用時,如何選擇這三個容器中哪乙個,應根據你的需要而定,一般應遵循下面  

的原則:  

1、如果你需要高效的隨即訪問,而不在乎插入和刪除的效率,使用vector  

2、如果你需要大量的插入和刪除,而不關心隨即訪問,則應使用list  

3、如果你需要隨即訪問,而且關心兩端資料的插入和刪除,則應使用deque。

vector   表示一段連續的記憶體區域,每個元素被順序儲存在這段記憶體中,對vector   的隨機訪問效率很高,但對非末尾元素的插入和刪除則效率非常低。

deque   也表示一段連續的記憶體區域,但與vector不同的是它支援高效地在其首部插入和刪除元素,它通過兩級陣列結構來實現,一級表示實際的容器,第二級指向容器的首和尾

list   表示非連續的記憶體區域並通過一對指向首尾元素的指標雙向鏈結起來,插入刪除效率高,隨機訪問效率低

vector與list的區別

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

vector與list的區別

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

vector與list的區別

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