相同点:都是STL提供的序列式容器,包含在std的命名空间。
不同点:
vector | list | |
底层结构 | 一段连续的内存空间(动态类型的顺序表) | 带头结点的循环双向链表 |
随机访问 | 支持随机访问任意位置的元素,时间复杂度O(1) | 不支持随机访问,需要遍历整个链表,时间复杂度O(n) |
插入/删除 | 任意位置插入和删除效率低,要搬移元素,时间复杂度O(n) | 效率高,只需要改变指针指向,时间复杂度O(1) |
是否需要扩容 | 插入期间如果容量不够需要扩容 | 不需要 |
迭代器 | 原生态类型指针 | 原生态类型指针的封装 |
迭代器失效原因 | Insert()/erase | erase() |
接口不同 | reserve() | push_front()/pop_front() |
应用场景 | 适合元素高效存储,经常访问任意位置的场景 | 适合需要任意位置的插入和删除的场景 |
空间利用率不同 | ||
缓存利用率不同 |