c++順序容器vector,List,deque的區別

三種容器均支持resize()操作,重新劃定容器大小,且此函數有重載。
 vector 
vector和built-in數組類似,是一個在堆上建立的一維數組,它擁有一段連續的內存空間,並且起始地址不變,因此它能非常好的支持隨即存取,即[]操作符。vector因爲存儲在堆上,所以支持erase( ), resize()(重新劃分容器容量)等操作; vector不用擔心越界當空間不夠用的時候,系統會自動按照一定的比例(對capacity( )大小)進行擴充。在vector序列末尾添加(push_back( ))或者刪除(pop_back( ))對象效率高,在中間進行插入或刪除效率很低,主要是要進行元素的移動和內存的拷貝,原因就在於當內存不夠用的時候要執行重新分配內存,拷貝對象到新存儲區,銷燬old對象,釋放內存等操作,如果對象很多的話,這種操作代價是相當高的。爲了減少這種代價,使用vector最理想的情況就是事先知道所要裝入的對象數目,用成員函式 reserve( )預定下來;vector最大的優點莫過於是檢索(用operator[ ])速度在這三個容器中是最快的,
list

 list的本質是一個雙向鏈表(根據sgi stl源代碼),內存空間不連續,通過指針進行操作。說道鏈表,它的高效率首先表現是插入,刪除元素,進行排序等等需要移動大量元素的操作。顯然鏈表沒有檢索操作operator[ ], 也就是說不能對鏈表進行隨機訪問,而只能從頭至尾地遍歷,這是它的一個缺陷。list有不同於前兩者的某些成員方法,如合併list的方法splice( ), 排序sort( ),交換list 的方法swap( )等等。

 

deque

 deque是一個double-ended queue是由多個連續內存塊構成,deque是list和vector的兼容,分爲多個塊,每一個塊大小是512字節,塊通過map塊管理,map塊裏保存每個塊得首地址。因此該容器也有索引操作operator[ ],效率沒vector高。另外,deque比vector多了push_front( ) & pop_front( )操作。在兩端進行此操作時與list的效率 差不多

 
下面是選擇順序容器類型的一些準則  

1.如果我們需要隨機訪問一個容器則vector要比list好得多 。
2.如果我們已知要存儲元素的個數則vector 又是一個比list好的選擇。  
3.如果我們需要的不只是在容器兩端插入和刪除元素則list顯然要比vector好  
4.除非我們需要在容器首部插入和刪除元素否則vector要比deque好。
5.如果只在容易的首部和尾部插入數據元素,則選擇deque.
6.如果只需要在讀取輸入時在容器的中間位置插入元素,然後需要隨機訪問元素,則可考慮輸入時將元素讀入到一個List容器,接着對此容器重新拍學,使其適合順序訪問,然後將排序後的list容器複製到一個vector容器中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章