vector
連續儲存的容器,動態陣列,在堆上分配空間
底層實現:陣列
兩倍容量增長:
vector 增加(插入)新元素時,如果未超過當時的容量,則還有剩餘空間,那麼直接新增到最後(插入指定位置),然後調整迭代器。
如果沒有剩餘空間了,則會重新配置原有元素個數的兩倍空間,然後將原空間元素通過複製的方式初始化新空間,再向新空間增加元素,最後析構並釋放原空間,之前的迭代器會失效。
效能:訪問:o(1)
插入:在最後插入(空間夠):很快
在最後插入(空間不夠):需要記憶體申請和釋放,以及對之前資料進行拷貝。
在中間插入(空間夠):記憶體拷貝
在中間插入(空間不夠):需要記憶體申請和釋放,以及對之前資料進行拷貝。
刪除:在最後刪除:很快
在中間刪除:記憶體拷貝
適用場景:經常隨機訪問,且不經常對非尾節點進行插入刪除。
list
動態鍊錶,在堆上分配空間,每插入乙個元數都會分配空間,每刪除乙個元素都會釋放空間。
底層:雙向鍊錶
效能:訪問:隨機訪問效能很差,只能快速訪問頭尾節點。
插入:很快,一般是常數開銷
刪除:很快,一般是常數開銷
適用場景:經常插入刪除大量資料
1)vector底層實現是陣列;list是雙向 鍊錶。
2)vector支援隨機訪問,list不支援。
3)vector是順序記憶體,list不是。
4)vector在中間節點進行插入刪除會導致記憶體拷貝,list不會。
5)vector一次性分配好記憶體,不夠時才進行2倍擴容;list每次插入新節點都會進行記憶體申請。
6)vector隨機訪問效能好,插入刪除效能差;list隨機訪問效能差,插入刪除效能好。
vector擁有一段連續的記憶體空間,因此支援隨機訪問,如果需要高效的隨即訪問,而不在乎插入和刪除的效率,使用vector。
list擁有一段不連續的記憶體空間,如果需要高效的插入和刪除,而不關心隨機訪問,則應使用list。
vector與list的區別
vector與list差異點與優缺點 1 vector動態增長 不是隨著每個元素的插入而自己增長的。預先存了一些儲存區,使得實際分配的空間比當前所需的空間多一些,而list 表示非連續的記憶體區域,並通過一對指向首位元素的指標雙向鏈結起來,因而可以兩個方向進行遍歷。2 當從vector末端刪除元素的...
vector與list的區別
1 vector vector的底層實現是陣列,它擁有一段連續的記憶體空間,並且起始位址不變,因此訪問的效率較高。由於他的記憶體空間是連續的,所以在中間進行插入和刪除的操作時,會造成記憶體塊的拷貝,在空間不夠的情況下,需要申請一塊最夠大的記憶體並進行記憶體的拷貝,也是基於這也原因,在vetcor的插...
vector與list的區別
vector為儲存的物件分配一塊連續的位址空間,因此對vector中的元素隨機訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現有元素進行複製,移動。如果vector中儲存的物件很大,或者建構函式複雜,則在對現有元素進行拷貝時開銷較大,因為拷貝物件要呼叫拷貝建構函式。對於簡單的小物件,v...