1. STL 六大部件
STL的部件(Components)
- 容器(Containers)
- 分配器(Allocator)
- 算法(Algorithms)
- 迭代器(Iterators)
- 适配器(Adapters)——进行转换
- 仿函数(Functors)
这里是一个使用了全部6种STL部件的代码案例
1 |
|
2. 迭代器(iterator)
1 | // 获取一个迭代器 |
3. 容器分类(container)
3.1 队列容器
- Array:事先分配元素个数的数组
- Vector:可以在尾部进行数组容量的扩充
- Deque:双端队列,可以在头部和尾部插入元素(pop_front、pop_back,push_front,push_back)
- Queue:队列,可以在尾部排队,头部离开
- List:双向链表
- Forward-List:单项链表
3.2 关系容器
- Set / Multiset:直接存储Value
- Map / Multimap:存储Key/Value,通过Key查找Value
- Unordered Set / Multiset:不进行排序
- Unordered Map / Multimap:不进行排序
array<int, 100> myArray:声明一个长度为100的array数组
vector
myVector:声明一个变量类型为int的vector数组 - size() 当前元素个数
- capacity() 容量
- front() 第一个元素
- back() 最后一个元素
- data() 元素起始地址
list
myList:声明一个变量类型为int的双向链表 - size() 当前元素个数
- max_size() 最大分配数量
- front() 首元素
- back() 为元素
deque
myDeque:声明一个变量类型为int的双端队列(没有iterator,否则会破坏它的性质) - queue:只保留了先进先出
- stack:只保留了后进先出
multiset
myMultiSet:底层使用红黑树实现,插入完成排序 - insert() 插入元素
- size() 元素个数
- max_size() 最大存储数量
- find() 查找元素
multimap
<int, string> myMulitMap:底层使用红黑树实现,插入完成排序
- insert() 插入元素(自己完成组合 pair<int, string>)
unordered_multiset
myUnMuSet:底层使用哈希表(开链法) - bucket_count() 篮子的数量(大于元素数量)
- bucket_size(int n) 某个篮子内元素数量(可能为0)
- load_factor() 载重因子
- max_load_factor() 最大载重因子
unordered_multimap<int, string> myUnMuMap:底层使用哈希表(开链法)