c 標準庫 容器類

2021-07-22 16:15:37 字數 1786 閱讀 9590

容器類可以分為兩大類和容器介面卡:

(1)序列容器(sequence containers)

這種容器中的元素是有序的,每乙個元素在容器中都有乙個確切的位置,這個位置不依賴於元素的值,而是跟放入容器的時機有關。標準的序列容器有三個:vector, deque, list。另外你也可以把字串(string)和陣列(array)看成序列容器。

vectors

乙個vector用動態陣列來管理它的元素。像普通陣列一樣,通過對應的索引支援隨機訪問。從乙個vector的尾部追加和刪除元素是快速高效的,而從頭部和中間進行這些操作效率就會低些,因為為了維護元素的序列索引必須多做一些移動元素的操作。

deques

deque 表示雙端佇列——double-ended quene。deque同樣用動態陣列來管理它的元素,但和vector不同的是,deque可以同時向兩個方向增長,所以在deque的頭部和尾部新增元素都是快速高效的,而在中間插入元素則效率稍低,因為要移動元素。

lists

list 使用雙向鍊錶來管理它的元素。這就表示list中的元素不能隨機訪問,所以在list中定位乙個元素要比在vector和deque中費時好多。但有利有弊,相比較與vector和deque,在list插入和刪除元素的效率在任何位置都是等效的,不需要移動其他的元素,只需要維護好指標連線即可,所以非常快速高效。

list因為不能隨機訪問元素,所以不支援操作符。

strings

對於c++中的base_string<>, string, wstring字串類,我們也可以視其為容器類,類似於vector,不同是它們的元素型別已經確定:char。

arrays

c或者c++的靜態陣列原則上不能歸類於stl容器,因為它們自己的成員函式,諸如:size(),empty()等等。然而stl的設計中卻允許你針對這些普通靜態陣列使用stl演算法。具體的使用請參看下面章節。

(2)關聯容器(associative containers)

這種容器是按值排序的,每乙個元素的位置不依賴與放入容器的時機,而是根據其值而定。通常關聯容器具體由二叉樹(binary tree)來實現。

標準的關聯容器類有四個:set, multiset, map, multimap。

set乙個set容器中的元素是按照其自身的值排序的,而且乙個值只允許出現一次。

multisets

乙個multiset容器除了允許出現相同值外,其它跟set容器一樣。

maps

乙個map容器中的元素是乙個key/value鍵值對,其中元素按照key來排序,而且不允許出現相同值得key。

multimaps

乙個multimap容器除了允許出現相同key值得元素之外,其它跟map容器一樣。

所有這些關聯容器類,它們預設的排序規則是操作符<,同時你也可以通過模板引數自定義排序規則(比較函式或者函式物件)。

(3)容器介面卡(container adapters)

除了基本的容器類外,c++標準庫還提供了一些容器介面卡類來滿足一些特殊的需求。這些容器介面卡類由基本的容器類實現。

stacks

乙個stack容器用lifo(last-in-first-out)的策略來管理元素。

queues

乙個queue容器用fifo(first-in-first-out)的策略來管理元素。

priority queues

乙個priority queue容器用優先順序的策略來管理元素。元素的優先順序基於程式設計師指定的乙個排序策略(預設用操作符<)。通常容器中下乙個元素就是優先順序最高的元素,如果優先順序最高的元素不止乙個,那麼它們的順序沒有定義。

C 標準庫容器 Map

本部落格主要簡述了c 標準庫容器map的一些特性 map 的定義及特性 乙個map就是乙個 關鍵碼,值 對偶的序列,它提供基於關鍵碼的快速提取操作。每個關鍵碼至多保持乙個值,換句話說,map中的關鍵碼具有唯一性。簡單來說,map提供了乙個對映關係來查詢元素。map的部分成員 成員定義備註 key關鍵...

STL標準庫 容器 forward list

forward list即單向list,功能少額外開銷就小.而且只能在前段插入元素 結構如下 一 定義 include int main int argc,const char ar return0 二 與迭代器的使用 由於forward list的迭代器內指向記憶體不連續 顧不能做迭代器 操作 i...

C STL標準庫容器 概覽

本文對c 中的stl標準庫容器進行概覽,作為筆者平時的學習筆記,以茲備忘。同時,本文作為乙個目錄,接下來對常用容器,比如vector,map等的 具體介紹的博文將會由本文進行索引。c 的標準容器庫中提供了一系列的容器模版,可以作為日常工作生產中的資料結構使用,以此減少了程式設計師很多去造輪子的工作量...