優點:
缺點:詳細介紹:stl容器:vector的簡介與使用
優點:缺點:
詳細介紹:stl容器:list的簡介與使用
實際運用中vector和list是兩個相輔相成的容器
vector
list
底層結構
動態順序表,一段連續空間
帶頭結點的雙向迴圈鍊錶
隨機訪問
支援隨機訪問,訪問某個元素效率o(1)
不支援隨機訪問,訪問某個元素效率o(n)
插入和刪除
任意位置插入和刪除效率低,需要搬移元素,時間複雜度為o(n),插入時有可能需要增容,增容:開闢新空間,拷貝元素,釋放舊空間,導致效率更低
任意位置插入和刪除效率高,不需要搬移元素,時間複雜度為o(1)
空間利用率
底層為連續空間,不容易造成記憶體碎片,空間利用率高,快取利用率高
底層節點動態開闢,小節點容易造成記憶體碎片,空間利用率低,快取利用率低
迭代器原生態指標
對原生態指標(節點指標)進行封裝
迭代器失效
在插入元素時,要給所有的迭代器重新賦值,因為插入元素有可能會導致重新擴容,致使原來迭代器失效,刪除時,當前迭代器需要重新賦值否則會失效
插入元素不會導致迭代器失效,刪除元素時,只會導致當前迭代器失效,其他迭代器不受影響
使用場景
需要高效儲存,支援隨機訪問,不關心插入刪除效率
大量插入和刪除操作,不關心隨機訪問
deque結合了vector和list的優點->集大成者
支援隨機訪問,也支援頭插頭刪。但是隨機訪問的效率並不是很高,c++為了追求效率更喜歡用vector。
目前能看到的應用就是stl用它作為stack和queue的底層資料結構。
詳細介紹:stl容器:deque的簡介與使用
vector,list,deque。用法區別
stl提供了三個最基本的容器 vector,list,deque。vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠...
vector,list,deque。用法區別
stl提供了三個最基本的容器 vector,list,deque。vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠...
如何選擇vector list deque
我想把三個常用的序列式放在一起對比一下是有必要的 vector vector和built in陣列類似,擁有一段連續的記憶體空間,能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當插入較多的元素後,預留記憶體空間可能不夠,需要重新申...