順序容器vector list deque的區別

2022-02-04 04:06:00 字數 1467 閱讀 8302

說明:這篇文章主要通過查閱網上資料整理而成,並非原創。

順序容器

三種容器均支援resieze()操作,重新劃定容器大小,且此函式有過載。

vector

vector和built-in陣列類似,是乙個在堆上建立的一維陣列,它擁有一段連續的記憶體空間,並且起始位址不變,因此 它能非常好的支援隨即訪問,即操作符。vector因為儲存在堆上,所以支援erase( ), resieze()(重新劃分容器容量)等操作; 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容器中

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

stl容器之順序容器

stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...