C STL 容器的一些總結

2021-10-10 21:17:32 字數 1206 閱讀 4263

容器中的元素為有序排列,可以指定元素插入位置.

順序儲存, 初始化過程會分配一定量空間, 在尾部插入會很快, 但是在中間插入元素, 會把之後所有元素向後平移, 所以較慢(中間刪除元素同理). 如果元素個數超過當前限制, 會重新分配更大空間, 再把原容器中所有元素都拷貝到新的容器中.

同vector類似, 最大的好處是在頭尾增刪元素效能較好. 其元素儲存在一組連續的記憶體中, 並在乙個結構中儲存這些記憶體追蹤, 並不是像vector一樣元素存在一塊連續的記憶體中.

本質是雙向鍊錶, 增刪元素速度較快, 但是並不支援用下標直接訪問元素.

容器中的元素插入時無法指定其位置, 如果需要修改元素值時, 不可以直接修改, 需要先找到該元素並刪掉, 再把所需的新元素插入. 其內部一般是通過紅黑樹實現的, 所以增刪及查詢操作效能較好.

內部元素為順序排好的, set不允許存兩個相同的元素, 而multiset同set相比允許存在相同的元素. ,map內部元素為pair, 其內部是按照key進行排好序的. map不允許存兩個相同key值的元素, 而multimap同map相比允許存在相同的key值的元素.

stl中基於雜湊表原理( 其中unordered_set和unordered_map都是用的開鏈法解決通過雜湊函式獲取的雜湊位址相同的多個元素的儲存問題.

圖中的各個鍊錶成為bucket(桶).

由於(multi)set/map的實現原理為紅黑樹, 所以其查詢和增刪元素的時間複雜度均為o(log(n)), 而unordered_set/map的實現原理為雜湊表, 所以其查詢和增刪元素的時間複雜度均為o(1). 但是unordered_set/map所占用的記憶體更高, 且根據元素數量不同, 時間消耗也不一定小於(multi)set/map.

在順序容器的基礎上實現, 遮蔽了部分功能, 增加了另一部分功能. 其中queue預設由deque實現, priority_queue預設由vector 實現。priority_queue 是「優先佇列」。它和普通佇列的區別在於,優先佇列的隊頭元素總是最大的——即執行 pop 操作時,刪除的總是最大的元素;執行 top 操作時,返回的是最大元素的引用。

所有的容器類都有以下介面:

int size(): 返回容器物件中所含有的元素的個數.

bool empty(): 返回容器物件是否為空.

假如乙個正向迭代器變數為iter.

C 容器的一些總結

原部落格 1 容器的定義 在資料儲存上,有一種物件型別,它可以持有其它物件或指向其它對像的指標,這種物件型別就叫做容器。很簡單,容器就是儲存其它物件的物件,當然這是乙個樸素的理解,這種 物件 還包含了一系列處理 其它物件 的方法。2 容器的種類 順序容器 是一種各元素之間有順序關係的線性表,是一種線...

C STL容器總結

三大類容器 1.序列式容器 vector deque list vector是一種動態陣列,在記憶體中具有連續的儲存空間,支援快速隨機訪問。由於具有連續的儲存空間,所以在插入和刪除操作方面,效率比較慢。vector有多個建構函式,預設的建構函式是構造乙個初始長度為0的記憶體空間,且分配的記憶體空間是...

c stl 一些東西

std map 其key是基於比較運算子的,因此自定義型別需要為該型別設定比較運算子操作 class a private int mm std mapkk std unordered map 基於hash實現,需要為自定義型別設定 運算子和雜湊函式 class a int get value con...