vector 与 list 区别 + 使用场景

vector 与 list 区别 + 使用场景

一、底层结构

  • vector动态数组,连续内存空间,基于数组扩容实现
  • list双向循环链表,不连续内存,每个节点存数据+前后指针

二、核心区别

  1. 内存布局

    • vector:连续内存
    • list:碎片化非连续内存
  2. 随机访问

    • vector:支持 []at()O(1) 随机访问
    • list:不支持随机访问,只能遍历迭代,访问中间元素 O(n)
  3. 插入/删除

    • vector:中间插入删除O(n),需要搬移元素;尾部快
    • list:任意位置插入删除O(1),只改指针,不搬数据
  4. 扩容机制

    • vector:满了自动扩容、重新分配内存、拷贝元素、迭代器容易失效
    • list:无扩容概念,每次新增只分配单个节点,迭代器不易失效
  5. 空间占用

    • vector:内存紧凑,额外开销小
    • list:每个节点多两个指针,内存开销更大,缓存不友好
  6. 迭代器失效

    • vector:插入/删除、扩容极易失效
    • list:仅被删除节点的迭代器失效,其他不受影响

三、使用场景

用 vector 的场景

  1. 需要频繁随机访问、下标取值
  2. 大部分操作是尾部增删,中间很少插入删除
  3. 追求缓存命中率、内存紧凑
  4. 普通数组、存储数据列表、缓冲区、容器默认首选

用 list 的场景

  1. 任意位置频繁插入、删除
  2. 不需要随机访问,只顺序遍历
  3. 不希望迭代器轻易失效
  4. 任务队列、频繁增减节点、链表结构业务

随机访问、尾部操作用 vector;频繁中间插删、不随机访问用 list。

相关推荐
代码中介商2 小时前
C++ 异常处理完全指南
开发语言·c++
Epiphany.5562 小时前
连通块的遍历
c++·算法·蓝桥杯
史迪仔01122 小时前
[QML] Qt6/Qt5四大渐变效果实战指南
开发语言·前端·c++·qt
张赫轩(不重名)2 小时前
加权重心(换根DP)
c++·算法·动态规划·图论
2401_840105202 小时前
题解: [GESP202409 八级] 美丽路径
数据结构·c++·算法·动态规划
YYYing.2 小时前
【C++项目之高并发内存池 (三)】万字解析CentralCache与PageCache的初步实现
c++·笔记·哈希算法·高并发·c/c++·内存池
tumu_C3 小时前
C++模板:Ret(Arg...)的相关
开发语言·c++·算法
huanworld3 小时前
QT C++ UDP通信
c++·qt·udp
不知名的老吴3 小时前
关于C++中的placement new
数据结构·c++·算法