std::vector与std::list的区别

C++ 各种容器的详细说明 (td::vector、std::list、std::deque、std::set、std::map 和 std::unordered_map) 是一个动态数组,能够自动调整大小。它在内存中连续存储元素,支持快速随机访问。std::list是一个双向链表,元素在内存中不连续存储。它支持高效的插入和删除操作。std::deque是一个双端队列,支持在两端高效地插入和删除元素。与不同,std::deque在内存中不连续存储元素。std::set是一个有序集合,存储唯一的元素,并自动对其进行排序。std::set通常使用红黑树实现。std::map是一个关联容器,存储键值对,并按键自动排序。std::map通常使用红黑树实现。 阅读详情

vector

std::vector是一种顺序容器,可以存放任意类型的对象,如int、double、bool等

它是一个动态的数组:即不需要像普通数组(如int a[10])一样预先分配元素个数,它可以根据插入的元素的多少来扩充对应的容量,一般是原先的1.5-2倍。

实质为,把之前的数据复制到新的数组中,再把先前的内存释放,这种方式可以很大的减少对内存的消耗。

因为数组是一组地址连续的存储空间,所以vector可以快速访问任意元素,支持[]下标访问元素。

但是插入或者删除元素的话,会造成数组内存的拷贝,从而影响到效率。

vector下标访问:

#include <vector>
#include <iostream>

using namespace std;

int main()
{
	vector<int> student;

	for (int i = 0;i<5;i++) {
		student.push_back(i);
	}
	// 访问vector中的 5 个值
	for (int i = 0; i < 5; i++) {
		cout << student[i] << endl;
	}

}

list

std::list的实质是双向链表,而链表在任意位置插入或者删除某个元素,只需对其前面和后面的元素进行接链和断链即可,

不需要移动其他的链表元素,对于删除和插入的效率比较高。

但是却不适合随机访问各个元素,因此不支持[]下标法访问元素。

结论:

vector强调的是通过随机存取的效率。

list强调的是插入和删除元素的效率。

C++面试八股文:std::vector和std::list,如何选择? 它的底层是单向链表,引入它的主要目的是为了达到手写链表的性能。指针指向的对象,而不需要移动元素的位置,所以不会导致迭代器失效。这里二师兄回答的倒是没有毛病,但是没有考虑到缓存问题。底层采用数组存储数据,所以它的空间局部性更好,对缓存更友好(被称为双向链表,和C中手写双向链表本质上没有大的区别。二师兄:并不会,因为在任意位置添加和删除元素只需要改变。在随机插入数据不会导致数据的搬移。二师兄:不是,GCC中的实现只有在。二师兄:与手写双向链表不同的是, 阅读详情

相关推荐

list和vector容器的插入与访问操作区别

那么底层其实就要申请一个大小为6的普通数组,并且把原元素拷贝过去,释放原数组内存,注意图中底层数组的内存起始地址已经变了。原vector中的size和capicity相同都是3,初始化为1 2 3,此时要push_back一个元素4。而在本案例中,我们使用vector来做insert的操作,此时大家可会发现,虽然表面上复杂度是O(n2),但是,其直观上来看数组的insert操作是O(n)的,整体代码的时间复杂度是O(n^2)。,就是可以不用关心初始时候的大小,可以随意往里放数据,那么。

CFY1226的博客 1256

【C++】链表(list)的使用以及与vector的区别

在 C++ 中,`std::list` 是标准库提供的一个容器类,用于将数据进行链式存储。**链表**(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。

AAADiao的博客 4279

C++笔记之std::list和std::vector的区别

这两种 C++ 标准库容器的核心区别可以概括为:**不能接受因为容器扩容导致的迭代器、指针或引用失效。对性能要求极高,依赖 CPU 缓存优化。需要频繁随机访问元素(如通过下标。数据量非常大,且绝不需要随机访问。是连续内存的“动态数组”,而。是分散内存的“双向链表”。数据量虽然动态变化,但主要在。进行插入、删除操作。

小勇博客 83

std::list(双向链表) 、 std::vector(动态数组,随机访问)、std::map、std::unordered_map

std::list 和 std::vector 是 C++ 标准库中的两种不同类型的容器,它们各有其特点和适用场景。

m0_47136986的博客 1217

340_C++_std::vector和set::list有什么区别?哪个更好,更能减少运行内存?以及存储的元素类型SnapInfo *、std::shared_ptr有什么优劣?

std::vector可能会因为连续的内存布局而浪费一些空间(例如,为了保持连续性而预留额外的空间),而std::list则因为每个元素都需要存储指向下一个和上一个元素的指针而增加了一些额外的开销。std::vector<SnapInfo *> 和 std::list<std::shared_ptr> 在C++中用于不同的目的,并且它们在内存使用和性能方面有不同的特性。使用std::shared_ptr会增加每个元素的内存开销,因为每个std::shared_ptr都需要存储引用计数和指向对象的指针。

HanLongXia的博客 493

手把手教你用Apollo Dreamview调试自动驾驶感知模块(附数据包下载)

本文详细介绍了如何使用百度Apollo平台的Dreamview工具调试自动驾驶感知模块,包括环境配置、数据加载、感知问题定位和多传感器融合调试等关键步骤。通过实战案例和参数调整技巧,帮助开发者快速掌握自动驾驶感知模块的调试方法,提升开发效率。

weixin_29084111的博客 138

C++ 中 std::vector 和 std::list 的区别

在 C++ 标准库(STL)中,std::vector 和 std::list 都是最常用的序列容器,它们都支持 push_back、insert、erase、begin()/end() 等相似接口,看起来“用法差不多”。但如果只停留在接口层面,就很容易在性能瓶颈出现时踩坑。本篇文章将一步步帮你彻底搞清楚二者的本质区别~~

2402_83493359的博客 588

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖

LS840233684的博客 2047

C++ 中 std::vector 和 std::list 的区别详解

在 C++ 标准库(STL)中,std::vector 和 std::list 都是最常用的序列容器,它们都支持 push_back、insert、erase、begin()/end() 等相似接口,看起来“用法差不多”。但如果只停留在接口层面,就很容易在性能瓶颈出现时踩坑。本篇文章将一步步帮你彻底搞清楚二者的本质区别~~

m0_74824496的博客 76

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

[官方培训]07-UE材质基础 孙丹璐 Epic 笔记

勾选允许自定义深度写入再在模型上勾选然后可以通过Scene Texture节点拿到渲染的自定义深度信息,有了自定义深度信息就可以与当前渲染的像素深度进行对比,自定义深度信息存放的是最靠近我们的深度,如果当前像素离自定义深度比较远我们就不要这个像素。效果如下这种方案的缺点也很明显,因为这样看不到第二层的透明了,如果是两层的半透明的裙摆,这样就看不到第二层的裙摆了。对于半透明排序问题最根本能解决的还是光线追踪,ue5中又加入了OIT(基于像素的排序)。官方透明材质的理解和应用。

Tcohneyn的博客 1562

【C++】std::list 和 std::vector的区别

扩容时会重新分配更大的内存块,并复制原有元素(性能开销较大)。内存分散,每个节点单独分配,无需预分配或扩容。但节点的指针会增加额外内存开销(每个元素需额外存储两个指针)。是两种常用的容器,它们分别基于不同的数据结构实现,适用于不同的场景。缺点:插入和删除操作(尤其是在中间或头部)效率较低(O(n)),可能需要移动大量元素。优点:支持常数时间的插入和删除操作(O(1)),无论位置如何。优点:支持高效的随机访问(时间复杂度 O(1))。缺点:随机访问效率低(O(n)),必须遍历链表。

qq_40904479的博客 1046

Nano Banana 2哪里使用?Nano Banana 2提示词合集和使用教程

收集最强的Nano Banana 2提示词合集,以及Nano Banana 2哪里使用的教程,并且有10个免费使用渠道。

qq_42927225的博客 1987

c++中 std::list 与 std::vector的区别

顺序存储和链式存储:std::vector 内部使用数组实现,将元素存储在连续的内存空间中;而 std::list 内部使用链表实现,每个元素可以分布在内存中的任意位置。

我的博客 1256

Android 编译系统(Build System)剖析

make是一种自动化构建工具,通过读取Makefile将源代码自动编译为可执行程序和库文件。

虎哥LoveDroid 2166

92. SAP ABAP 系统里长文本 Long Text 的设计和读取函数 READ_TEXT 的详细讲解

SAP ABAP中的长文本(Long Text)是指在SAP系统中存储和管理较长文本信息的一种机制。长文本通常用于存储描述性信息、注释、说明等,这些文本信息可能超过了标准数据库表字段的长度限制。 长文本的作用主要有以下几点: 1. 更多的信息存储:长文本允许您存储和显示比标准表字段允许的更多信息。例如,产品描述、用户注释、维护计划等可能需要大量的文本来详细描述。 2. 更好的可读性:长文本提供了更好的文本格式化选项,可以改善可读性。用户可以使用段落、列表、字体样式等格式化文本,以便更容易地理解和阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1993

std::set, std::list, std::vector在erase的区别

std::set、std::list、std::vector在erase的区别

WangIcter的专栏 4384

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4029

std的list, vector, map, set区别与用法比较

List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。 Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。另外对于新添加的元素,Vector有一套算法,而List可以任意加入。 Map,Set属于标

killer1989的博客 932

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

std::vector,std::deque,std::list的区别的使用

vector    表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。 deque    也表示N段连续的内存区域组成,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾   list    表示非连续的内存区域并通过一对指向

LKMIRACLE的专栏 1498

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【面试】std::vector 和 List 的区别

 std::vector 和  List 的区别

流离年少,林夕十里 2387

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[zz]std::vector,std::deque,std::list的区别的使用

vector 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。 deque 也表示N段连续的内存区域组成,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾 list 表示非连续的内存区域并通过...

weixin_30877755的博客 91

std的list, vector, map,multimap, set 区别与用法比较

List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。 Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变...

hankern的专栏 7173
上一篇: linux常用操作指令
下一篇: shell脚本
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值