STL概述
C++標準庫包含STL和一些其他內容
STL有六大組件:
容器,分配器,算法,迭代器,適配器,仿函數
復雜度,Complexity,BIG-O
1.常數時間復雜度
2.線性時間復雜度
3.次線性時間復雜度
4.平方時間復雜度
5.立方時間復雜度
6.指數時間復雜度
7.介于線性及二次方成長的中間時間復雜度
容器
順序性容器
array
不能增長 提供size() front() back() data()等操作
可以進行隨機訪問
vector
只可在尾部進行插入操作,插入速度較快
提供front() back() data() capacity()
capacity會成二的倍數增長
可以進行隨機訪問
list
含有兩根指針, 物理地址不一定連續
插入速度很快
無法進行隨機訪問 ,需要遍歷才可得到指定位置
forword-list
只含有一根指針,物理地址不一定連續
提供向前插入
占用空間更小
slist
gnu中的擴展控件
是forward_list的一種早期實現方式
deque
雙向開口的連續空間
每一段成為一個緩沖 buffer
stack
先進后出的一種輔助容器,底層可以由deque實現
queue
先進先出的一種輔助容器,底層可以有deque實現
關聯性容器
(multi)set?(multi)map
multi類型可以一個鍵對應多個值
set的元素只有一個?
map的元素是一個pair 分別為key 和value
底層為RB Tree
unordered容器
unordered_(multi)map?unordered_(multi)set
底層為HashTable
bucket數可以大于后面掛的項數
分配器
GNU C提供的擴展控件
array_allocator
mt_allocator
debug_allocator
pool_allocator
malloc_allocator
new_allocator
在功力并不深厚時 盡量使用std自帶的分配器 不要自己手動使用