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自带的分配器 不要自己手动使用