目录
- 容器分类
- vector
- size与capacity的区别
- 数组与vector的区别
- 扩容机制
- map、set与unordered_map区别
一、 容器分类
序列式容器 | 关联式容器 | 容器适配器 |
---|---|---|
vector | set | stack |
deque | multiset | queue |
list | map | priority_queue |
- | multimap | - |
注意:
(1) 序列式容器才可以在容器初始化的时候制定大小,关联式容器不行
(2)注意,关联容器的迭代器不支持it+n操作,仅支持it++操作
(3)优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按
照队列中元素的优先权顺序出队
二、 vector
- size与capacity的区别
size是真实元素的所占的空间打开,capacity是整个可容纳的空间大小
- 数组与vector的区别
- 扩容机制
(1) vector在push_back以成倍增长可以在均摊后达到O(1)的事件复杂度,相对于增长指定大小的O(n)时间复杂度更好
(2) 为了防止申请内存的浪费,现在使用较多的有2倍与1.5倍的增长方式,而1.5倍的增长方式可以更好的实现对内存的重复利用
三、map、set与unordered_map区别
map | unordered_map |
---|---|
有序 | 无序 |
红黑树 | 哈希表 |
空间占用率高(缺点) | 哈希表的建立比较耗费时间(缺点) |
适于有顺序要求(优点) | 适于有查找要求(优点) |
map | set |
---|---|
既有key也有value | 只有key没有value |
允许修改value,但不允许修改key | 迭代器是const的,不允许修改元素的值 |
可以使用下标访问 | 不可以使用下标访问 |