C 容器對比

2021-10-03 19:16:26 字數 2172 閱讀 3439

型別

vector

list

deque

maphash_map

set簡介

vector是c++標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。封裝了陣列。

雙向鍊錶,每乙個結點都包括乙個資訊快info、乙個前驅指標pre、乙個後驅指標post。封裝了鍊錶。

雙端佇列。(deque,全名double-ended queue)是一種具有佇列和棧的性質的資料結構。雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。deque是在功能上合併了vector和list。

map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map**現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性map內部的實現自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能。

基於hash table(雜湊表)。 雜湊表最大的優點,就是把資料的儲存和查詢消耗的時間大大降低,幾乎可以看成是常數時間;代價是消耗比較多的記憶體。

它用於儲存資料,並且能從乙個資料集合中取出資料。它的每個元素的值必須唯一,而且系統會根據該值來自動將資料排序。每個元素的值不能直接被改變。內部結構採用紅黑樹的平衡二叉樹。multiset 跟set 類似,唯一的區別是允許鍵值重複!

分配空間

分配一塊連續的記憶體 

不連續的記憶體空間

小片的連續記憶體,小片間用鍊錶連線

動態分配

分配一大片記憶體,形成許多桶。

動態分配

優點1. 不指定一塊記憶體大小的陣列的連續儲存,即可以像陣列一樣操作,但可以對此陣列進行動態操作。通常體現push_back() pop_back()

2. 隨機訪問方便,即支援[ ]操作符vector.at()

3. 節省空間。

1. 不使用連續記憶體完成動態操作。

2. 在內部方便的進行插入和刪除操作

3. 可在兩端進行push、pop

1. 可以使用,只是速度沒有vector快。

2. 快速的訪問隨機的元素,快速的在開始和末尾插入元素,隨機的插入,刪除元素要慢。

3.可在兩端進行push、pop

1.自動建立key - value的對應。

2. 快速的查詢。

3. 遍歷性能高於hash_map。

1. 用時短,查詢效率極高。

2. 適用於資料量較大的查詢。

1. 內部有序,相當於陣列。

2. set是一種集合,可以進行集合的各種操作(並、交、補等)。

缺點1. 在內部進行插入刪除操作效率低。

2. 只能在vector的最後進行push和pop,不能在vector的頭進行push和pop。

3. 當動態新增的資料超過vector預設分配的大小時要進行整體的重新分配、拷貝與釋放。

1. 不能進行內部的隨機訪問,即不支援[ ]操作符和vector.at()

2. 相對於verctor占用記憶體多

1. 相對於vector占用更多的記憶體。

1. 查詢效能比hash_map低。

1. 消耗記憶體較多。

2. 新增和刪除較多的時候,效能比map低。

1. 只含有乙個key值元素。

備註選擇標準:

1. 如果需要隨機訪問乙個容器則vector要比list好得多;如果已知要儲存元素的個數則vector 又是乙個比list好的選擇。 

2. 如果需要的不只是在容器兩端插入和刪除元素則list顯然要比vector好,除非需要在容器首部插入和刪除元素否則vector要比deque好。

3. 如果只在容易的首部和尾部插入資料元素,則選擇deque。

4. 如果只需要在讀取輸入時在容器的中間位置插入元素,然後需要隨機訪問元素,則可考慮輸入時將元素讀入到乙個list容器,接著對此容器重新排序,使其適合順序訪問,然後將排序後的list容器複製到乙個vector容器中。

其他:set和vector的區別在於set不包含重複的資料。set和map的區別在於set只含有key,而map有乙個key和key所對應的value兩個元素。map和hash_map的區別是hash_map使用了hash演算法來加快查詢過程,但是需要更多的記憶體來存放這些hash桶元素,屬於採用空間來換取時間策略。

c 標準容器介紹與對比

c 中的容器類包括 順序儲存結構 和 關聯儲存結構 前者包括vector,list,deque等 後者包括set,map,multiset,multimap等。若需要儲存的元素數在編譯器間就可以確定,可以使用陣列來儲存,否則,就需要用到容器類了。1 vector 連續儲存結構,每個元素是在記憶體上是...

集合容器對比

vector和list vector 在記憶體中是連續儲存的,對於隨機訪問的效率較高 對於插入和刪除,由於需要複製元素,開銷較大 list在記憶體中是離散儲存的,對於隨機訪問需要遍歷,效率較低而對於插入刪除效率較高 list執行緒不安全,vector是執行緒安全的 arraylist和linkedl...

cpp stl 容器對比

包含13個模板類 和關聯式容器 容器內的元素按照一定的規則放到適當的位置,插入元素時不能指定位置 序列式容器 元素在容器中的位置與元素值無關,插入元素時可以指定在容器中插入的位置 容器介面卡 不支援任意一種迭代器set 集合 關聯式容器由節點組成的紅黑樹 元素有序且唯一 集合 鍵是唯一的,值的型別必...