vector和 list區別,應用

2021-10-22 07:37:15 字數 1082 閱讀 6944

vector和 list區別,應用

1、概念:

1)vector

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

底層實現:陣列

兩倍容量增長:vector 增加(插入)新元素時,如果未超過當時的容量,則還有剩餘空間,那麼直接新增到最後(插入指定位置),然後調整迭代器。如果沒有剩餘空間了,則會重新配置原有元素個數的兩倍空間,然後將原空間元素通過複製的方式初始化新空間,再向新空間增加元素,最後析構並釋放原空間,之前的迭代器會失效。

效能:訪問:o(1)

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

在最後插入(空間不夠):需要記憶體申請和釋放,以及對之前資料進行拷貝。

在中間插入(空間夠):記憶體拷貝

在中間插入(空間不夠):需要記憶體申請和釋放,以及對之前資料進行拷貝。

刪除:在最後刪除:很快

在中間刪除:記憶體拷貝

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

2、list

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

底層:雙向鍊錶

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

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

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

適用場景:經常插入刪除大量資料

2、區別:

1)vector底層實現是陣列;list是雙向 鍊錶。

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

3)vector是順序記憶體,list不是(list只能快速訪問頭尾節點)。

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

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

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

3、應用

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

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

list和用vector區別

list和用vector區別 stl提供了三個最基本的容器 vector,list,deque vector和 built in 陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即 操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷...

list和用vector區別

stl提供了三個最基本的容器 vector,list,deque。vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠...

list和vector的區別

vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能夠非常好的支援隨機訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝。另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大...