当前位置: 首页 > news >正文

vector和list区别

一:基本定义

vector:

基于连续内存的动态数组。

提供随机访问。

list:

基于双向链表

每个元素是一个节点,节点间通过指针连接,支持任意位置插入和删除

二:底层数据结构

vector:

元素存储在连续的内存块中。

内部维护三个指针:begin,end,capacity

当容量不足时,重新分配更大内存并复制元素

list:

元素存储在非连续的节点中,每个节点包含数据、前指针和后指针。

节点间通过指针链接,形成双向链表

内存分配是分散的,按需分配。

三:内存布局

vector:

连续内存,元素紧凑排列。

优点:访问效率高

缺点:插入删除需移动元素

list:

非连续内存,节点分散。

优点:插入删除只需调整指针

缺点:访问效率低

四:访问方式

vector:

支持下标随机访问

时间复杂度:O(1)

list:

不支持随机访问,只能遍历。

访问第n个元素时间复杂度:O(n)

五:插入和删除

vector:

尾部:push_back和pop_back是O(1)(可能触发扩容)

中间/头部:insert和erase是O(n),需要移动元素。

扩容时可能重新分配内存并拷贝所有元素。

list:

任意位置:insert和erase是O(1),只需调整指针。

不涉及内存重新分配。

六:内存管理

vector:

预分配容量capacity,通过reserve可减少重新分配。

扩容时通常按倍增(如2倍)分配。

list:

按需分配,每个节点独立申请内存。

无需预分配。

七:迭代器失效

vector:

插入可能导致扩容,使所有迭代器失效。

删除或插入(非尾部)使后序迭代器失效。

list:

插入和删除只影响当前节点的迭代器。

八:元素存储开销

vector:

仅存储元素本身,无额外指针。

内存效率高。

list:

每个节点存储数据、前指针后指针

内存效率低。

http://www.dtcms.com/a/88190.html

相关文章:

  • 个股场外期权参与条件有哪些要求?
  • Android 系统进程启动Activity方法说明
  • 一步部署FTP虚拟用户
  • ES数据过多,索引拆分
  • SBOM风险预警 | 恶意NPM组件开展木马投毒攻击,目标针对国内泛互企业
  • 前端面试整理
  • 三步打造Temu多账号独立IP环境
  • 2025年01月13日字节(本地生活)前端面试
  • centos 7 搭建FTP本地用户
  • 数据库取证分析
  • 【Git】--- 分支管理
  • vue 点击放大,图片预览效果
  • vue项目配置服务器代理,解决请求跨域问题
  • el-table下的复选框关联勾选
  • thinkphp8.0\swoole的websocket应用
  • MySQL: 创建两个关联的表,用联表sql创建一个新表
  • 电机控制常见面试问题(十八)
  • vulntarget_a 训练笔记
  • 人工智能赋能:生成式游戏的未来趋势
  • 响应式 Web 设计:HTML 与 CSS 协同学习的进度(二)
  • 2025-03-24 学习记录--C/C++-PTA 习题7-7 字符串替换
  • 预测蓝桥杯16届嵌入式省赛客观题
  • 【进阶编程】Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt 和 Tauri 的详细对比
  • CPP中的numeric库中的accumulate求和函数说明
  • Python----计算机视觉处理(Opencv:绘制图像轮廓:寻找轮廓,findContours()函数)
  • 深入剖析ReLU激活函数:特性、优势与梯度消失问题的解决之道,以及Leaky ReLU 和 Parametric ReLU
  • Python和json
  • PTA 1105-链表合并(C++)
  • 大模型的后训练(post-training)方法
  • 【区块链通用服务平台及组件】绿信链 | FISCO BCOS 应用案例