容器學習3 順序容器概括

2021-10-02 10:31:26 字數 1438 閱讀 5759

乙個容器就是一些特定物件的集合,順序容器提供了控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置相對應。

vector

可變大小陣列,支援快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢

deque

雙端佇列。支援快速隨機訪問。在頭尾位置插入/刪除速度很快

list

雙向鍊錶,只支援雙向順序訪問。在list中任何位置進行插入/刪除操作速度都很快

forward_list

單向鍊錶,只支援單向順序訪問,在鍊錶中任何位置進行插入/刪除操作都很快

array

固定大小陣列。支援快速隨機訪問。不能新增或者刪除元素

string

與vector類似的容器,但專門用於儲存字元。隨機訪問很快。在尾部插入/刪除很快

string和vector將元素儲存在連續的記憶體空間中,由於元素時連續儲存的,由下標來計算其他位址時非常快速的。支援隨機訪問(一般通過下標)。但是在這兩種容器中間位置進行新增或者刪除操作會很麻煩:在一次插入或者刪除操作後,需要移動插入/刪除位置之後的所有元素?list(雙鏈表)和forward_list(單鏈表)兩個容器的設計目的是令容器中任何位置的新增和刪除操作都很快速。作為代價,這兩個容器不支援隨機訪問:為了訪問乙個元素,只能遍歷整個容器。而且記憶體消耗也比較大(因為要儲存指標啥的)

deque與string和vector類似,deque支援快速隨機訪問,同樣的在中間位置進行插入和刪除操作的代價也很高,但是在deque兩端新增或者刪除元素都是很快的

forward_list和array是新c++標準增加的型別,與內建陣列相比,arrray是一種更安全,更容易使用的陣列型別,array物件是大小固定的。因此,array不支援新增和刪除元素以及改變容器大小的操作。forward_list的設計目標是達到與手寫的單鏈表資料結構相當的效能。因此,forward_list沒有size操作

小總結:

array和內建陣列的聯絡與區別:

forward_list是和資料結構單鏈表手寫的類似,所以很多功能特性也跟單鏈表一樣。

deque和vector都支援隨機訪問,但是兩者的儲存方式卻有差異:deque是以塊來儲存,每塊包含相同數量大小的元素,而vector是採用一塊記憶體來儲存連續的元素,

vector的缺點主要在於向vector新增元素的時候,如果容量不足,vector便會重新malloc一段更大的記憶體,然後把原記憶體中的資料memcpy到新的記憶體中,並free原記憶體塊,然後將新元素加入。如果插入位置在頭部或者中間位置,則需要將元素後移,效率並不是很高

容器 順序容器

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

C primer 順序容器(3)

前幾篇主要是把vector與string放在一起討論,本篇主要是將list與forward list放在一起比較 list故名思義就是列表的意思。首先我們來看看列表與我們之前討論的vector和string有什麼區別。2.正因為這個特點,如果list要訪問容器中的某一元素,就得遍歷整個容器。使得訪問...

容器 順序容器 關聯容器

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