C++中的vector和list的区别与适用场景
区别
特性 | vector | list |
---|---|---|
底层实现 | 动态数组 | 双向链表 |
内存分配 | 连续内存块 | 非连续内存块 |
随机访问 | 支持,通过索引访问,时间复杂度O(1) | 不支持,需遍历,时间复杂度O(n) |
插入/删除 | 末尾操作效率高,时间复杂度O(1) | 任意位置操作效率高,时间复杂度O(1) |
内存开销 | 较低 | 较高,需要额外存储指针 |
迭代器稳定性 | 插入/删除迭代器会失效 | 插入/删除迭代器不会失效 |
使用场景
使用vector
的场景
1.需要频繁随机访问元素。
2.数据量较大且内存连续性有助于性能优化。
3.插入和删除操作主要集中在容器末尾。
使用list
的场景
1.需要频繁在中间插入或者删除元素。
2.数据量较小,内存开销不是主要考虑因素。
3.不需要随机访问,仅需顺序遍历。
示例代码
vector
的常用方法
- 初始化
std::vector<int> vec ={1,2,3};
std::vector<int> vec2(10,0);//初始化大小为10,所有元素为0
2.添加元素
vec.push_back(4);//在尾部添加元素
vec.insert(vec.begin()+1,10);//在指定位置插入一个或多个元素。
vec.emplace_back(5);//在末尾直接构造元素,避免不必要的拷贝
vec.emplace(vec.begin() + 1, 5, 6); // 指定位置直接构造元素,在索引 1 的位置直接构造 pair(5, 6)
vec.assign(3,7);//替换整个 vector 的内容,vec变为 {7,7,7}
3.删除元素
vec.pop_back();//删除尾部元素
vec.erase(vec.begin()+1);//删除指定位置的元素
4.访问元素
int vel=vec[0];//随机访问
int val2=vec.at(1);//带边界的访问
5.遍历
for(int val:vec){std::cout << val << " ";
}
6.修改大小
vec.resize(5)//调整大小为5
7.清空
vec.clear();
list
的用法
1.初始化
std::list<int> lst={1,2,3};
std::list<int> lst2(10,0);//初始化大小为10,所有元素为0
2.添加元素
lst.push_back(4);//在尾部添加元素
lst.push_front(0);//在开头添加元素
auto it = lst.begin();
std::advance(it,1);
lst.insert(it,5);//在指定位置插入元素
3.删除元素
lst.pop_back();
lst.pop_front();//删除开头元素
lst.erase(lst.begin());//删除指定位置的元素
4.访问元素
for(int val:lst){std::cout << val << " ";
}
- 修改大小
lst.resize(5);//调整大小为5
- 清空
lst.clear();
7.排序
lst.sort();//对列表进行排序
- 合并
std::list<int> lst2 = {4,5,6};
lst.merge(lst2);
9.反转
lst.reverse();//反转列表
通过以上总结,可以根据具体需求选择使用vector
或list
相关文章:
C++中的vector和list的区别与适用场景
区别 特性vectorlist底层实现动态数组双向链表内存分配连续内存块非连续内存块随机访问支持,通过索引访问,时间复杂度O(1)不支持,需遍历,时间复杂度O(n)插入/删除末尾操作效率高,时间复杂度O(1)任意位置操作效率高&am…...

VRRP与防火墙双机热备实验
目录 实验一:VRRP负载均衡与故障切换 实验拓扑编辑一、实验配置步骤 1. 基础网络配置 2. VRRP双组配置 二、关键验证命令 1. 查看VRRP状态 2. 路由表验证 三、流量分析 正常负载均衡场景: 故障切换验证: 实验二:防火…...

win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
现象: 1. 当时新建运行的资源管理器的任务卡了或者原本资源管理器卡了 比如:当时在文本框中输入explorer 注:explorer.exe是Windows的文件资源管理器,它用于管理Windows的图形外壳,包括桌面和文件管理 按住CtrlAltEs…...
【前端】【业务场景】【面试】在前端开发中,如何优化 SVG(可缩放矢量图形)的性能,特别是在处理复杂图形和动画时
SVG 性能优化:循序渐进 4 步法 目标:先减负 → 再复用 → 后加速 → 最后按场景微调 ① 精简—把包袱先丢掉 删除无用元素 隐藏/被遮挡的 <path>、未引用的 <defs> 里渐变、滤镜。 合并路径 同填充色或描边的路径 ⇒ SVGO / SVGOMG「Mer…...

基于LAB颜色空间的增强型颜色迁移算法
本文算法使用Grok完成所有内容,包含算法改进和代码编写,可大大提升代码编写速度,算法改进速度,提供相关idea,提升效率; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法,用于将缩略图D的…...

基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 单自由度磁悬浮减振器工作原理简介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.课题概述 基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真。其中,SIMMECHANICS是M…...
河北省大数据应用创新大赛样题
** 河北省大数据应用创新大赛样题 ** 1. 在Linux下安装Java并搭建完全分布式Hadoop集群。在Linux终端执行命令“initnetwork”,或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络。 【数据获取】 使用wget命令获取JDK安装包: “w…...
RabbitMQ 的专业术语
术语定义示例/说明生产者(Producer)发送消息到 RabbitMQ 的客户端应用程序。日志系统将错误信息发送到 RabbitMQ。消费者(Consumer)从 RabbitMQ 队列中接收并处理消息的客户端应用程序。一个订单处理服务从队列中读取消息并更新数…...
【教程】安装 iterm2 打造漂亮且高性能的 mac 终端
【教程】安装 iterm2 打造漂亮且高性能的 mac 终端_mac 安装iterm2-CSDN博客 全面解析:Github网站无法访问的解决方法! 安装myzh 参考文章:https://blog.csdn.net/qq_44741467/article/details/135727124 下载地址:GitCode - 全球开发者的开源…...
redis特性及应用场景
文章目录 什么是redis?热库redis作为热库的特性redis适用场景 什么是redis? redis在系统架构中的位置就是冷热分离架构的热数据库位置, redis就是热库, 我们一般说缓存数据库。 其他的像MySQL、SQL Server这种关系数据库、MongoDB…...
算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 鲸鱼优化算法 一、原理与公式二、应用领域三、算法改进研究四、完整MAT…...
前端面试常见部分问题,及高阶部分问题
面试中也极有可能让你徒手写代码,无聊的面试问题o( ̄︶ ̄)o 一、HTML/CSS 基础与进阶 常见问题 什么是语义化标签?有哪些常用语义化标签? 答案:语义化标签是指具有明确含义的 HTML 标签,如 <header>、<footer>、<article>、<section> 等。它们有…...

C++初登门槛
多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如,蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质:通过基类指针或引用操作子类对象,实现运行时动态绑定。 表现形式: 接口统一&a…...
C/C++线程详解
一、C语言线程创建(POSIX线程) 1. 基本创建方法 POSIX线程(pthread)是C语言中创建线程的标准API: #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...

红队系列-网络安全知识锦囊-CTF(持续更新)
CTF CTF系列-AWD专题篇CTF-比赛培训基础1 CTF 介绍HTTP协议分析进阶001.CTF简介_宽字节注入高级 2018CTF——黑客大赛特训CTF-PWNPWNCTF竞赛中的主要题型之一了解CTF Capture The Flag 夺旗描述:# gets从标准输入设备读字符串函数#下面是对main函数中的汇编代码的解释:modifi…...

Windows环境下常用网络命令使用
ipconfig命令使用: ipconfig可用于显示当前的TCP/IP配置的设置值,通常是用来检验人工配置的TCP/IP设置是否正确。在网络连接出现问题时,可以使用ipconfig /release和ipconfig /renew命令来刷新IP地址,这通常能解决因IP地址冲突或…...

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling
双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling 简介:今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,…...
easyExcel导入导出convert
easyExcel版本2.2.7,3.0及以上使用不一致 类上加注解 ExcelProperty(value "下发类型",converter ComponentPurchaseBomExceladvanceStatusConvert.class)private Integer advanceStatus; 转换类 import com.alibaba.excel.converters.Converter; impo…...
C语言高频面试题——指针函数和函数指针的区别
在 C 语言中,指针函数 和 函数指针 是两个容易混淆的概念,但它们的功能和用途完全不同。以下是详细的对比分析,帮助你彻底理解它们的区别。 1. 指针函数(Function Returning a Pointer) 定义 指针函数 是一个返回值为…...

软考中级-软件设计师 知识点速过1(手写笔记)
第一章:数值及其转换 没什么可说的,包括二进制转八进制和十六进制 第二章:计算机内部数据表示 真值和机器数: 原码(后面都拿x -19举例) : 反码: 补码: 移码: 定点数…...
【美化vim】
美化vim 涉及文件一个例子 涉及文件 ~/.vimrc修改这个文件即可 一个例子 let mapleader ,set number " 显示行号"set relativenumber " 显示相对行号set incsearch " 实时开启搜索高亮set hlsearch " 搜索结果高亮set autoinden…...
Dash框架深度解析:数据驱动型Web应用的Python化革命
一、Dash的定位与技术基因 Dash作为Python生态中的现象级框架,重新定义了数据科学家与Web应用开发之间的边界。它以**“零前端”**为核心设计理念,将React的组件化思想、Plotly的可视化能力与Flask的轻量化服务完美融合,使得Python开发者无需深入JavaScript技术栈即可构建交…...

Linux——线程(1)线程概念与控制
线程?这个名字我们似乎有些眼熟?没错,我们之前提到过的进程和这个有点像。但进程和线程有什么关系呢?本系列我们讲从线程的概念出发,了解一下Linux中的线程以及线程和进程的关系等内容。 一、线程的概念 线程是一个执…...
Redis LFU 策略参数配置指南
一、基础配置步骤 设置内存上限 在 redis.conf 配置文件中添加以下指令,限制 Redis 最大内存使用量(例如设置为 4GB): maxmemory 4gb选择 LFU 淘汰策略 根据键的作用域选择策略: # 所有键参与淘汰 maxmemory-…...

备忘录模式:实现对象状态撤销与恢复的设计模式
备忘录模式:实现对象状态撤销与恢复的设计模式 一、模式核心:在不破坏封装性的前提下保存和恢复对象状态 在软件开发中,经常需要实现 “撤销” 功能(如文本编辑器的撤销修改、游戏存档读取)。直接暴露对象内部状态会…...
蓝桥杯 5. 交换瓶子
交换瓶子 原题目链接 题目描述 有 N 个瓶子,编号为 1 ~ N,放在架子上。 例如有 5 个瓶子,当前排列为: 2 1 3 5 4每次可以拿起 2 个瓶子,交换它们的位置。 要求通过若干次交换,使得瓶子的编号从小到大…...
本地使用Ollama部署DeepSeek
以下是在本地使用Ollama部署DeepSeek的详细教程,涵盖安装、修改安装目录、安装大模型以及删除大模型的操作步骤。 安装Ollama 1. 系统要求 确保你的系统满足以下条件: 操作系统:macOS、Linux或者Windows。足够的磁盘空间和内存。 2. 安装…...

freecad参数化三维模型装配体解析至web端,切换参数组或修改参数
用免费开源的freecad制作全参数化的三维模型,并且装配,上传至服务器,解析至web端,用户可以切换参数或修改参数,驱动模型改变。 freecad全参数化装配体模型解析至web端进行参数切换、修改完整展示_哔哩哔哩_bilibili …...
前端基础之《Vue(9)—混入》
一、什么是混入 1、是一种代码复用的技巧 Vue组件是由若干选项组成的,向组件中混入可复用的选项。 2、作用 比如我封装两个组件,一个是A组件,一个是B组件,发现它里面有相同的选项,就可以用混用的方式来复用它。 二、…...
ORACLE DATAGUARD遇到GAP增量恢复方式修复RAC环境备机的实践
ORACLE DATAGUARD技术是一个常用的数据保护机制,在DATAGUARD运行过程中,遇到异常导致备机不同步,而主库的归档日志也被清理,此时出现GAP,无法同步;就需要人工处理;对于小型数据库重新全量同步数…...