天天看點

1 STL部件【容器、配置設定器、算法、疊代器、擴充卡、仿函數】容器簡介【序列容器、關聯容器、無序容器】STL六大部件:C++11新規定的周遊方式容器分類

文章目錄

  • 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值都是無序存放的,因為哈希表本身就是無序的

繼續閱讀