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。

相关推荐
2023自学中3 小时前
C++ 内存追踪器
linux·c++
DogDaoDao7 小时前
【GitHub】 LLVM Project 深度解析:现代编译器基础设施的基石
java·c++·python·程序员·github·编译器·llvm
KuaCpp7 小时前
C++进程(下)
c++
来一碗刘肉面8 小时前
C++中的引用语法
c++·算法
杜子不疼.8 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt
知无不研9 小时前
算法:Fizz Buzz解题思路
c++·算法·leetcode
汉克老师9 小时前
GESP2026年6月认证C++八级( 第二部分判断题(1-10))精讲
c++·归并排序·dijkstra·二分·互斥·gesp8级·可重复组合
nianniannnn10 小时前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++
诚信定制83910 小时前
C++23新特性实战与CLion深度支持
开发语言·c++·算法
知无不研11 小时前
缺省参数与缺省函数的区别
c++·语法