发布于2026-07-04 阅读(0)
扫一扫,手机访问
表格里汇总了最常用的操作复杂度,一目了然,咱们直接看数据:

| 操作 | vector | list | map |
|---|---|---|---|
| 随机访问 []/at() | O (1) 极快 | 不支持随机访问 | 不支持随机访问 |
| 头部插入 / 删除 | O (n)(整体移位) | O (1) 极快 | O(log n) |
| 尾部插入 / 删除 | 均摊 O (1) 极快 | O(1) | O(log n) |
| 中间插入 / 删除 | O (n)(大量移位) | O(1) | O(log n) |
| 按值查找 | O (n) 遍历 | O (n) 遍历 | 按键查找 O (log n) |
| 内存开销 | 小,仅存数据 | 大,额外存双向指针 | 大,树平衡额外标记 |
什么时候用?频繁随机读写、尾部增删的场景,中间插入很少出现。看一段最基础的使用:
#include#include using namespace std; int main() { vector vec; vec.push_back(10); // 尾部添加 vec.push_back(20); vec.insert(vec.begin(), 5); // 头部插入,效率低 cout << vec[1]; // 随机访问 O(1) // 遍历 for (int x : vec) cout << x; return 0; }
适用场景:频繁在头部或中间增删,而且几乎不需要随机读取。直接上代码:
#includeint main() { list
lst; lst.push_back(1); lst.push_front(0); // 头部插入很快 // 无 lst[0] 这种随机访问,只能迭代器遍历 for (auto it = lst.begin(); it != lst.end(); ++it) {} return 0; }
适用场景:需要 key 自动排序、按键快速查找,而且键不能重复。看个例子:
#include
✅ 优点:随机访问超快、缓存友好、内存紧凑、遍历速度最快。
❌ 缺点:头部/中间插入删除大量元素移位,扩容时会拷贝数据。
场景:数组、缓存、数据批量存储,绝大多数业务场景的首选。
✅ 优点:任意位置插入删除仅修改指针,没有内存拷贝。
❌ 缺点:不支持随机访问,遍历慢、内存碎片多、缓存不命中。
场景:频繁中间增删、队列节点管理、极少需要按下标查询的场景。
✅ 优点:key 有序,按键二分查找,插入删除稳定 logn 复杂度。
❌ 缺点:不能按下标随机遍历 value,树结构内存开销大。
场景:字典、有序映射、需要按 key 快速检索的配对数据。
上一篇:C++变量赋值实现过程
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8