文章目錄
- STL六大部件:
- C++11新規定的周遊方式
- 容器分類
-
- 序列式容器
- 關聯式容器
- 無序式容器
STL六大部件:
- 容器 container:存儲資料,使用者不必關心資料在記憶體的存儲形式,隻需要知道怎麼用容器接口
- 配置設定器 allocator:幫助容器在記憶體規劃位置
- 算法 algorithm:與資料分離,能夠執行某種操作
- 疊代器 iterator:連接配接容器(資料)和算法(操作)的橋梁,好像一種泛化指針
- 擴充卡 adapter:進行轉換,可以針對容器、仿函數、疊代器
- 仿函數 Funtor:作用像一個函數
标準庫規定,容器的頭尾是前閉後開,即[ )類型
C++11新規定的周遊方式
for (decl : coll) {
statement
}
//decl是declare,聲明一個變量
//coll是collection,表示一個元素集合/容器
//示例1:周遊集合中的元素
for (int i :{2,3,4,5}) {
cout << i << endl;
}
//示例2:傳值輸出集合中的元素
for (auto e : vec) {
cout << e << endl;
}
//示例3:傳址修改集合中的元素
for (auto& e : vec) {
e *= 3;
}
容器分類
序列式容器
array:由C++本身的數組包裝得到。大小固定,不能改變
vector:能夠自動擴充的數組,隻能在尾部擴充
deque:雙向隊列,可以在頭尾擴充
list:雙向連結清單
forward-list:單向連結清單
關聯式容器
有key和value,因為能夠根據key查找value,是以關聯式容器十分适合需要大量查找的資料
set/multiset:底層紅黑樹。key就是value,即紅黑樹的每個節點上隻存儲一個key值,該key值就=value值。
set表示存放元素的key不能重複,multiset表示存放元素的key可以重複
map/multimap:底層紅黑樹。key和value分開存放,即紅黑樹的每個節點上既要存儲key值,還要存儲value值。
map表示存放元素的key不能重複,multimap表示存放元素的key可以重複
以紅黑樹為底層的關聯式容器,key值都是有序存放的,因為紅黑樹本身就是有序的
無序式容器
其實也是一種關聯式容器,但是獨立了出來
unordered set/multiset:底層哈希表。
unordered map/multimap:底層哈希表。
以哈希表為底層的無序式容器,key值都是無序存放的,因為哈希表本身就是無序的