一、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.pswp.cn/pingmian/80794.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/80794.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/80794.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VCS X-PROP建模以及在方针中的应用

VCS X-PROP建模以及在方针中的应用 摘要:VCS X-Prop(X-Propagation)是 Synopsys VCS 仿真工具中的一种高级功能,用于增强 X 态(未知态)和 Z 态(高阻态)在 RTL 仿真中的建模和传播能力…

HPE ProLiant DL360 Gen11 服务器,配置 RAID 5 教程!

今天的任务,是帮客户的一台HPE ProLiant DL360 Gen11 服务器,配置RAID 5。依然是按照我的个人传统习惯,顺便做一个教程,分享给有需要的粉丝们。如果你在实际操作中,遇到了什么问题,欢迎在评论区留言&#x…

PyTorch深度神经网络(前馈、卷积神经网络)

文章目录 神经网络概述神经元模型多层感知机前馈神经网络网络拓扑结构数学表示基本传播公式符号说明整体函数视角 卷积神经网络卷积神经网络发展简史第一代(1943-1980)第二代(1985-2006)第三代(2006-至今)快…

三轴云台之控制算法协同技术篇

三轴云台的控制算法协同技术是确保云台在复杂动态环境下实现高精度、高稳定性运动控制的核心,其技术体系涵盖多传感器融合、多算法协同以及多目标优化三个关键维度。以下从技术架构与实现路径展开分析: 一、多传感器融合:构建环境感知基础 三…

Adobe DC 2025安装教程

一.软件下载 点此下载 二.软件安装

[Java实战]Spring Boot 整合 Freemarker (十一)

[Java实战]Spring Boot 整合 Freemarker (十一) 引言 Apache FreeMarker 作为一款高性能的模板引擎,凭借其简洁语法、卓越性能和灵活扩展性,在 Java Web 开发中占据重要地位。结合 Spring Boot 的自动化配置能力,开发者能快速构建动态页面、…

DeepSeek:开启能源领域智能化变革新时代

目录 一、DeepSeek 与能源领域变革的邂逅1.1 DeepSeek 在人工智能领域的地位与特点1.2 能源行业面临的挑战与变革需求1.3 DeepSeek 在能源领域应用的重要性和意义 二、能源政策解读与科普新助手2.1 能源政策解读的深度变革2.2 能源科普的创新使者 三、能源项目可行性分析新利器…

uniapp设置 overflow:auto;右边不显示滚动条的问题

设置了overflow:auto;或者其它overflow的属性不显示滚动条是因为在uniapp中默认隐藏了滚动条 解决方法: //强制显示滚动条 ::-webkit-scrollbar {width: 8px !important;background: #ccc !important;display: block !important;}//设置滚动条颜色.cu-…

hyper-v安装ubuntu后时磁盘空间扩容

使用hyper-v创建虚拟机Ubuntu 22.04,直接使用的是磁盘镜像,原磁盘空间只有12GB,明显不够用呀,现在想要扩展到50GB,准备开始。 1、先关闭Ubuntu,再hyper-v管理器中调整磁盘容量到50GB 2、进入虚拟机 3、准备…

Prometheus 的介绍与部署(入门)

一、什么是Prometheus; 1.介绍 Prometheus 是一个功能强大的监控工具,适用于各种环境。通过简单的安装和配置,可以快速实现对系统和服务的监控。无论是单机环境、容器化环境还是 Kubernetes 集群,Prometheus 都能提供灵活…

Angular 知识框架

一、Angular 基础 1. Angular 简介 Angular 是什么? 基于 TypeScript 的前端框架(Google 维护)。 适用于构建单页应用(SPA)。 核心特性 组件化架构 双向数据绑定 依赖注入(DI) 模块化设计…

注解和 XML 两种方式有什么区别?

注解和 XML 是两种常见的配置方式(尤其在 Java 开发中,如 Spring 框架),它们的主要区别体现在配置方式、代码耦合性、可读性、维护性等方面。以下是两者的对比: 1. 配置方式 注解(Annotation) 在…

Python爬虫实战:研究拦截器,实现逆向解密

1. 案例背景与研究目标 1.1 研究背景 在数字化时代,网络数据成为重要资源。许多网站通过加密技术保护数据传输,如电商平台的价格信息常以加密形式存在。爬虫技术与逆向工程的结合,为合法获取和分析此类数据提供了解决方案。 1.2 研究目标 开发完整的 Python 爬虫系统,实现…

Math工具类全面指南

Math工具类全面指南 前言一、Math 类的基础特性1.1 类的声明与常量1.2 数据类型支持 二、基础算术运算2.1 绝对值运算2.2 取整运算2.2.1 floor():向下取整2.2.2 ceil():向上取整2.2.3 round():四舍五入取整 2.3 最大值与最小值 三、三角函数与…

嵌入式C语言中指针的不同类型及其特点分析

在 C 语言中,指针的类型主要可以分为以下几类: 1.1 基本类型指针 基本类型指针是指指向基础数据类型的指针,通常用于存储变量的地址。它们的类型与指向的变量类型相同。常见的基本类型指针包括: 整型指针:int *p,p是一个指向整型数据的指针。字符型指针:char *p,p是…

gd32e230c8t6 keil6工程模板

下载固件gd32e230c8t6固件官方下载(需登录) 或 蓝奏云 新建一个文件夹,把固件压缩包里的里的Firmware和Template拖进去 keil新建gd32e230c8工程 必须勾选CMSIS-CORE 新建一个文件夹,双击任意改名 点击manage project it…

SQL看最多的数据,但想从小到大排列看趋势

SQL 查询:从 test 表中获取本月的数据,并对数量最多的前10个流程按数量升序排序 假设表结构 test 表包含请求信息。workflow_base 包含流程的基本信息。 CREATE TABLE test (requestid INT, -- 请求IDworkflowid INT, -- 流程IDcurr…

WebGL知识框架

一、WebGL 基础概念 1. WebGL 简介 是什么? 基于 OpenGL ES 的浏览器 3D 图形 API,直接操作 GPU 渲染。 核心特点 底层、高性能、需手动控制渲染管线。 依赖 JavaScript 和 GLSL(着色器语言)。 与 Three.js 的关系 Three.js…

LabVIEW电涡流传感器自动校准系统

在工业生产中,尤其是大型旋转机械的运行监测环节,电涡流传感器的精准校准极为关键。传统手动校准方式存在诸多弊端,如人工参与度高、操作重复、效率低下等,难以满足现代工业快速发展的需求。基于 LabVIEW 开发的电涡流传感器自动校…

HCIP-BGP综合实验

一:拓扑图 二:需求分析 1,AS1存在两个环回,一个地址为192.168.1.0/24该地址不能在任何协议中宣告,AS3中存在俩个环回,一个地址为192.168.2.0/24该地址不能在任何协议中宣告,最终要求这两个环回…