vector和list的區別


請你說一說vector和list的區別,應用,越詳細越好?

1、概念:

1)Vector

連續存儲的容器,動態數組,在堆上分配空間

底層實現:數組

兩倍容量增長:

vector 增加(插入)新元素時,如果未超過當時的容量,則還有剩余空間,那么直接添加到最后(插入指定位置),然后調整迭代器。

如果沒有剩余空間了,則會重新配置原有元素個數的兩倍空間,然后將原空間元素通過復制的方式初始化新空間,再向新空間增加元素,最后析構並釋放原空間,之前的迭代器會失效。

性能:

訪問:O(1)

插入:在最后插入(空間夠):很快

在最后插入(空間不夠):需要內存申請和釋放,以及對之前數據進行拷貝。

在中間插入(空間夠):內存拷貝

在中間插入(空間不夠):需要內存申請和釋放,以及對之前數據進行拷貝。

刪除:在最后刪除:很快

在中間刪除:內存拷貝

適用場景:經常隨機訪問,且不經常對非尾節點進行插入刪除。

2) List

動態鏈表,在堆上分配空間,每插入一個元數都會分配空間,每刪除一個元素都會釋放空間。

底層:雙向鏈表

性能:

訪問:隨機訪問性能很差,只能快速訪問頭尾節點。

插入:很快,一般是常數開銷

刪除:很快,一般是常數開銷

適用場景:經常插入刪除大量數據

2、區別:

1)vector底層實現是數組;list是雙向 鏈表。

2)vector支持隨機訪問,list不支持。

3)vector是順序內存,list不是。

4)vector在中間節點進行插入刪除會導致內存拷貝,list不會。

5)vector一次性分配好內存,不夠時才進行2倍擴容;list每次插入新節點都會進行內存申請。

6)vector隨機訪問性能好,插入刪除性能差;list隨機訪問性能差,插入刪除性能好。

3、應用

vector擁有一段連續的內存空間,因此支持隨機訪問,如果需要高效的隨即訪問,而不在乎插入和刪除的效率,使用vector。

list擁有一段不連續的內存空間,如果需要高效的插入和刪除,而不關心隨機訪問,則應使用list。


免責聲明!

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



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