vector:矢量容器
- 插入:push_back(尾插) O(1)
insert (按位置插入) O(n)
- 删除:pop_back(尾删)O(1)
erase(按位置删) O(n)
- 访问:O(1)
优点:尾部操作和随机访问速度快
缺点:不支持头插、任意位置删除和插入复杂度较高
扩容方式:
1.倍数开辟二倍的内存
2.旧的数据拷贝到新内存
3.释放旧的内存
4.指向新的内存
list 双向循环链表
- 插入:insert (按位置插入) O(1)
push_front (头插) O(1)
push_back(尾插)O(1)
- 删除:pop_back(尾删)O(1)
pop_front(头删)O(1)
erase(按位置删)O(1)
- 访问: O(n)
优点:插入和删除的速度快
缺点:访问速度慢,不支持系统默认的sort排序,内存不连续
deque
deque 容器底层不连续,deque的迭代器将其连续
- 插入:push_back(尾插) O(1)
push_front(头插) O(1)
insert (按位置插) O(n)
- 删除:pop_back(尾删)O(1)
pop_front(头删)O(1)
erase(按位置删) O(n)
- 访问:O(1)
优点:头尾插入和删除以及访问速度快
缺点:按位置插入和删除速度慢
扩容:
deque的扩容包含两部分,数据区域以及映射区域的扩容
数据区域扩容:数据区域的指针指向数据区域的中间,保证头部有空间,数据区域满时对映射区域进行调整,在合适的位置开辟新的数据区域
映射区域扩容:映射区域中已使用的映射区移到中间,保证上下游空闲的位置。