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

Vector和list

一、Vector和list的区别——从“它们是什么”到“区别在哪儿”

1. 它们是什么?

  • Vector:类似于一排排整齐的书架(数组),存放元素时,元素排成一条线,连续存储。可以很快通过编号(索引)找到任何一项。

  • List:像一串珠子,每个珠子知道前后两个珠子(通过指针连接),存储位置不连续。有两种常用链表:单链表和双链表,双链表每个节点都知道前后两个节点。

2. 它们的主要差别

比较点VectorList
存储方式连续内存(数组式)非连续(链式)
访问元素支持随机访问(用下标直接取)需要遍历,逐个走链找到
插入/删除(尾部)快(摊销时间O(1))快(指针操作,无移动元素)
中间插入/删除复杂(需要移动大量元素,时间O(n))方便(只需调整链表指针,时间O(1))
内存使用占用连续空间,偶尔会需要重新“扩容”多占用空间(存指针)
迭代速度快(缓存友好,占用连续内存)相对慢(节点散布内存,缓存效率低)

二、实际工作中的应用场景——什么时候用Vector,什么时候用list?

场景一:你要频繁随机访问元素——用Vector

  • 比如存储一组数据,之后可能会多次访问(查找、排序)

场景二:你需要在中间插入或删除元素——用List

  • 比如维护一个任务队列,任务需要频繁插入到中间或删除, 或是在链表头尾操作

场景三:尾部频繁插入删除(比如维护动态数组),用Vector

场景四:需要稳定的元素存储,不频繁改变结构,容器大小变化不大,用Vector


三、迭代器会失效的情况——擦亮眼睛,避免“坑”!

1. 什么是迭代器?

  • 就像指针一样的东西,用来看“容器”里的元素。比如auto it = vec.begin();,用it可以遍历所有元素。

2. 什么时候迭代器会失效?

Vector的情况
  • push_back
    • 增加元素可能会导致容器重新分配(扩容)
    • 这时候所有原有的迭代器都“作废”了(指向的地址变了)
  • erase(删除元素)
    • 删除元素后,除非用返回值重启迭代器,否则原迭代器会失效
  • resize(调整大小)
    • 改变容器大小也可能导致迭代器失效
List的情况
  • 插入和删除操作
    • 不会影响其他迭代器,只要你不删除它们指向的元素,迭代器不会失效

3. 小结——什么情况下失效?

容器类型会导致迭代器失效的操作示例
Vectorpush_back()(扩容时),erase()resize()添加元素导致重分配,删除某元素后继续用旧迭代器
List一般情况下不会失效,只要不删除迭代器指向的元素插入、删除元素不会使其他迭代器失效

四、通俗点的理解——比喻和总结

比喻:搬家和串珠

  • Vector:就像把所有房子(元素)堆在一排(连续内存)里。搬家(扩容)时,可能要找个更大的车(新空间),搬出来所有房子(大量移动元素),旧的地址都不能用了(迭代器失效)

  • List:像一串串珠子,每个珠子用线串起来(指针连接)。插入或删除珠子,只要调转指针就行,不会影响其他珠子。

小结一句话

  • Vector:“快、连续、随机访问”——适合“读多写少、以访问为主”的场景,但扩容时可能会“搬家”,导致迭器失效。
  • List:”链式、插入删除快“——适合“频繁插入删除、顺序存储不变”的场景,不会轻易导致迭代器失效,只要注意不要删除你关心的珠子。
http://www.xdnf.cn/news/448921.html

相关文章:

  • FastAPI + OpenAI 模型 的 GitHub 项目结构模板
  • OPC UA + ABP vNext 企业级实战:高可用数据采集框架指南
  • 基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
  • 自注意力机制(Self-Attention)前向传播手撕
  • 记录一次git提交失败解决方案
  • 某智能家电龙头,社招 校招全面应用 AI 面试的创新实践
  • 企业应收账款管理体系构建指南
  • CN 第二章 应用层-单选题
  • day 16 Numpy数组与Shap值的深入理解
  • 让 Cursor 教我写 MCP Client
  • 生成本地package
  • 什么是生产管理三大核心计划机制,需求、物料、生产计划的区分与实施方法
  • MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?
  • Hadoop集群故障节点隔离操作指南
  • 【行为型之策略模式】游戏开发实战——Unity灵活算法架构的核心实现策略
  • AE FC77X77XXFC78X78XXFC79X MFC质量流量计 Mass Flow Controllers user manual
  • 电流检测放大器的优质选择XBLW-INA180/INA181
  • 半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6
  • MySQL库级管理:数据库管理与存储引擎剖析
  • 2002-2024年地级市新质生产力词频统计数据(46个关键词词频)
  • 【大模型面试每日一题】Day 18:大模型中KV Cache的作用是什么?如何通过Window Attention优化其内存占用?
  • Java并发编程:深入浅出掌握多线程艺术
  • Docker 介绍与使用
  • 【idea】调试篇 idea调试技巧合集
  • QFileDialog文件选择框
  • 解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南
  • acwing 3653. 好坑的电子地图 最短路 dijkstra算法
  • 如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?
  • Openshift节点Disk pressure
  • 03_朴素贝叶斯分类