stl序列式容器也叫線性容器.包括 array、vector、deque、list 和 forward_list 容器。
1.stl容器的型別
簡單的理解容器,它就是一些模板類的集合,但和普通模板類不同的是,容器中封裝的是組織資料的方法(也就是資料結構)。stl 提供有 3 類標準容器,分別是序列容器、排序容器和雜湊容器,其中後兩類容器有時也統稱為關聯容器.
1.1 序列容器(線性容器)
序列容器主要包括:vector 向量容器、list 列表容器以及 deque 雙端佇列容器。之所以被稱為序列容器,是因為元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置,元素就會位於什麼位置。
1.2 排序容器
包括 set 集合容器、multiset多重集合容器、map對映容器以及 multimap 多重對映容器。排序容器中的元素預設是由小到大排序好的,即便是插入元素,元素也會插入到適當位置。所以關聯容器在查詢時具有非常好的效能。
1.3雜湊容器
c++11 新加入 4 種關聯式容器,分別是 unordered_set 雜湊集合、unordered_multiset 雜湊多重集合、unordered_map 雜湊對映以及 unordered_multimap 雜湊多重對映。和排序容器不同,雜湊容器中的元素是未排序的,元素的位置由雜湊函式確定。
2 .迭代器的類別
常用的迭代器按功能強弱分為輸入迭代器、輸出迭代器、前向迭代器、雙向迭代器(順序迭代器)、隨機訪問迭代器 5 種.
2.1 前向迭代器(forward iterator)
假設 p 是乙個前向迭代器,則 p 支援 ++p,p++,*p 操作,還可以被複製或賦值,可以用 == 和 != 運算子進行比較。此外,兩個正向迭代器可以互相賦值。
2.2 雙向迭代器(bidirectional iterator)
雙向迭代器具有正向迭代器的全部功能,除此之外,假設 p 是乙個雙向迭代器,則還可以進行 --p 或者 p-- 操作(即一次向後移動乙個位置)。
2.3 隨機訪問迭代器
隨機訪問迭代器具有雙向迭代器的全部功能。除此之外,假設 p 是乙個隨機訪問迭代器,i 是乙個整型變數或常量,則 p 還支援以下操作:
p+=i:使得 p 往後移動 i 個元素。
p-=i:使得 p 往前移動 i 個元素。
p+i:返回 p 後面第 i 個元素的迭代器。
p-i:返回 p 前面第 i 個元素的迭代器。
p[i]:返回 p 後面第 i 個元素的引用
此外,兩個隨機訪問迭代器 p1、p2 還可以用 <、>、<=、>= 運算子進行比較。另外,表示式 p2-p1 也是有定義的,其返回值表示 p2 所指向元素和 p1 所指向元素的序號之差(也可以說是 p2 和 p1 之間的元素個數減一)。
2.4 不同容器的迭代器
容器和迭代器的對應關係
容器對應的迭代器
array
隨機迭代器
vector
隨機迭代器
deque
隨機迭代器
list
雙向迭代器
map/multimap
雙向迭代器
set/multiset
雙向迭代器
forward_list
前向迭代器
unordered_map / unordered_multimap
前向迭代器
unordered_set / unordered_multiset
前向迭代器
stack
不支援迭代器
queue
不支援迭代器
2.5 迭代器的定義方式
迭代器的定義方式
具體格式
正向迭代器
容器類名::iterator 迭代器名;
常量正向迭代器
容器類名::const_iterator 迭代器名;
反向迭代器
容器類名::reverse_iterator 迭代器名;
常量反向迭代器
容器類名::const_reverse_iterator 迭代器名
通過定義以上幾種迭代器,就可以讀取它指向的元素,*迭代器名就表示迭代器指向的元素。其中,常量迭代器和非常量迭代器的分別在於,通過非常量迭代器還能修改其指向的元素。另外,反向迭代器和正向迭代器的區別在於:
對正向迭代器進行 ++ 操作時,迭代器會指向容器中的後乙個元素;
而對反向迭代器進行 ++ 操作時,迭代器會指向容器中的前乙個元素。
以上 4 種定義迭代器的方式,並不是每個容器都適用。有一部分容器同時支援以上 4 種方式,比如 array、deque、vector;而有些容器只支援其中部分的定義方式,例如 forward_list 容器只支援定義正向迭代器,不支援定義反向迭代器。
c STL 容器 聯合容器
stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...
C STL容器總結
三大類容器 1.序列式容器 vector deque list vector是一種動態陣列,在記憶體中具有連續的儲存空間,支援快速隨機訪問。由於具有連續的儲存空間,所以在插入和刪除操作方面,效率比較慢。vector有多個建構函式,預設的建構函式是構造乙個初始長度為0的記憶體空間,且分配的記憶體空間是...
C STL容器運用
priority queue 優先佇列 是定義在 標頭檔案中的乙個模板類,與佇列相比,優先佇列不是按照入隊順序出隊,而是按照佇列中元素的優先權出隊。預設情況下,按照大者優先的順序出隊,也可以指定運算元來指定所需的優先順序。priority queueq1 定義資料型別為int,預設大的先出隊 pri...