vector,deque,list,map,数组比较与分析

c++容器详解Vector、deque、list、set、multiset、map、multimap、queue、stcak、Array 是每个节点都带有颜色属性(颜色为红色或黑色)的自平衡二叉查找树,满足以下性质1)节点是红色或黑色;2)根节点是黑色;3)所有叶子节点都是黑色节点(NULL);4)每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。5)从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。 阅读详情

vector:
为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高.
deque:
为存储的对象分配一块连续的地址空间,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾.

vector和数组区别:
vector是个容器,array不是
vector可以知道自己的大小,array不知道
vector可以变大变小,这里变小指的是元素数目,array不能变大变小
数组在内存中分配的连续空间,多次分配释放后会有内存碎片,
vectors内存是连续的地址空间动态增长的,当前的容量(capacity)不足就申请一块当前容量2倍的新内存空间,然后将所有的老元素全部拷贝到新内存中,添加大量元素的时候的花费的惊人的大.
还有vector的迭代器能防止出现类似数组愈界,所以vector更加安全,健壮 等等
效率上我认为数组更高一点,数组只是一个基本类型,少了vector 的封装,少了构造函数和析构函数这些操作


vector和deque的相同点
1.顺序容器
2.为动态一维数组
3.在中间位置插入和删除操作时间复杂度为O(N);
4.可以快速随机访问元素
不同点:
1.vector支持push_back, pop_back操作; deque支持push_back, push_front, pop_back, pop_front操作;
2.vector的push_back, pop_back操作时间复杂度为O(1), 头部插入和删除操作时间复杂度为O(N);deque的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1);
3.vector为连续的存储空间; deque的存储空间为页面或块;
4.vector预留存储空间;deque不预留存储空间.

vector,list区别
vector适用:对象数量变化少,简单对象,随机访问元素频繁
list适用:对象数量变化大,对象复杂,插入和删除频繁
最大的区别是,list是双向的,而vector是单向的。

list和map的区别:
list底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢。
list 的push_back, push_front, pop_back, pop_front操作时间复杂度为O(1),查找的话需要通过迭代器编译 时间复杂度是O(n)
map 的内部实现是RB-tree 红黑二叉树 插入和删除的时间复杂度是O(LOG2N)

1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。



参考:

http://blog.youkuaiyun.com/xiexievv/article/details/8611777

http://blog.youkuaiyun.com/longshengguoji/article/details/8519812

http://blog.163.com/lee_020/blog/static/12475560201239115850409/

C++ 容器对比汇总 vector deque list forward_list map set multimap unordered_map 【代码】C++ 容器 vector deque list forward_list map set multimap unordered_map 等访问插入性能内存特点存储结构适用场景区别汇总。 阅读详情

相关推荐

STL中vector、list、deque和map的区别

STL中vector、list、deque和map的区别

【C++】关于STL中list、deque、vector的插入删除的时间复杂度的比较

一、vector 是动态数组,在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放;如果新值大于当前大小时才会重新分配内存。 扩容方式: 1、倍数开辟二倍的内存 2、旧的数据开辟到新内存 3、释放旧的内存 4、指向新内存 时间...

like_that的博客 3万+

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

vector,map以及list性能对比

虽然说map是关联容器,一般关联的数据都使用map来存储,但是实际上vector或者list也是可以代替这样的功能。 具体实现可以看 https://blog.youkuaiyun.com/Think88666/article/details/89430259 比如vector保存一个结构体: struct stData { int key; int value; } 又或者用ve...

Think88666的博客 2万+

ROS实践(四)机器人SLAM建图(gmapping)

本文介绍了SLAM技术及其实现方法。SLAM(同步定位与地图构建)让机器人在未知环境中通过传感器数据自主定位并构建地图。文章详细讲解了激光雷达、RGBD相机等常用传感器,以及gmapping和map_server这两个ROS功能包的使用方法。重点阐述了SLAM建图实验步骤:配置gmapping节点参数、启动机器人仿真、运行gmapping节点、使用rviz可视化工具、通过键盘遥控机器人完成地图构建并保存。实验结果表明,该方法能有效实现机器人自主建图功能,为后续导航等应用奠定基础。

qq_1033275663的博客 4328

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 439

map vector 插入时间复杂度

问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。   简单分析如下:     考虑vector每次内存扩充两倍的情况。     如果我们插入N个元素, 则会引发lgN次的内存扩充,而每次扩充引起的元素拷贝次数为                                       2^0,  2^1, 2^2, ..., 2^lgN

MTT_SKY 1万+

基于Java+SpringBoot+微信小程序实现奶茶点单系统

再不用担心逢年过节的第一杯奶茶有没有人送了,制作一个奶茶点单系统自己当店主,开怀畅饮,一劳永逸。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

c++几种常见STL容器比较和分析 hashmap, map, vector, list

list快速插入和删除,但查找费时。 vector快速查找,插入费时。 map查找速度快(时间复杂度是对数的O(logN)),完全二叉检索树存储结构。 hash_map 在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。  更多:http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html

学习足迹 1147

如何用 Claude Code 阅读和理解陌生代码

摘要: 在接手陌生代码时,Claude Code能显著提升理解效率。核心策略是结构化拆解而非逐行阅读: 从整体入手:先扫描目录结构、定位核心模块,建立项目地图; 聚焦关键路径:通过数据流追踪、异常逻辑分析,识别技术债与风险点; 规避常见错误:避免抽象提问或一次性提交全部代码,应分模块精准提问; 高阶应用:可生成逻辑分层图、标记高复杂度区域,甚至定制阅读顺序。 最终目标是通过结构优先的提问策略,将理解周期从数天压缩至数小时。

sg_knight的专栏 1018

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5207

STL---stack/queue/deque/priority_queue详解(从使用到底层)

deque适合头尾插入删除,效率最高(相比vector和list)。同样申请100个字节,deque只要申请一次,list要申请10次(假设每个结点10个字节),而vector也要扩容多次。deque下标随机访问效率还行,如果大量数据(100w级数据),效率略低于vector,毕竟deque要计算下标,第几个buff的第几个位置,还是需要点时间的。deque的insert和erase就需要大量挪动数据,效率比list和vector都低。

2501_94636284的博客 1021

模型训练篇 | 手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程

手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程。本篇文章将带你学习 ResNet50 模型构建、ResNet50训练自己数据集、数据集处理、推理和验证、模型剪枝与模型改进等。 本篇教程适配各种分类识别任务,可以说是一个通用的教程,只需修改自己的数据集即可完成自己领域的任务和系统实现。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 719

c++ list, vector, map, set 区别与用法比较

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

keep moving 5万+

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 912

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c++(vector、map、list、deque、set)总结-面试

C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multiset可以存放多个相同的key。

m0_67794241的博客 1195

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

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

vector、list、deque的差异

适配器是一种封装底层容器的设计模式,目的是提供统一的访问接口,同时屏蔽底层容器的实现细节。例如std::queue(队列)和std::stack(栈)是典型的适配器,它们默认以std::deque作为底层容器。

2401_87727424的博客 1194

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++中 vector、list、deque、set、map的底层实现

stl容器区别: vector list deque set map-底层实现 stl容器区别: vector list deque set map (转) 在STL中基本容器有: vector、list、deque、set、map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set:集合, 用来判断某一个元素是不是在一个组里面,使

1万+

C++中list、deque以及vector对比

C++中list、deque以及vector对比 C++的容器类包括两大类: 1.顺序存储结构,包括vector、list、deque等等; 2.关联存储结构,包括set、map、multiset等等; 对比vector、list以及deque这三种顺序存储结构 注: 顺序存储结构表明,其中的每个元素之间是有先后顺序的,这个顺序只和插入/删除等操作有关,而与元素的值无关。 一、ve...

HHA的博客 2437

STL中list,vector,deque,map,set区别、联系和使用场景原理

一、Vector:动态数组 vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。(中间插入和删除效率低) vector的基本原理如下: 它采用线性空间存储数据。如果空间不够,则另外分配新的两倍大小的空间,然后把旧空...

hhd1988的专栏 1797

STL之常用容器string、vector、deque、stack、list、set、map讲解

​ 简述: 了解STL之常用容器string、vector、deque、stack、list、set、map讲解书写一个简单地例子。 文章目录本博文的简述or解决问题?容器:大纲如图:知识点讲解:string:vector:内存结构样子:收缩内存技巧:原理图示:![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbn...

1490

c++ vector,list,deque,map,set,hash_map 特点及区别

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

积累点滴,保持自我 895

c++ list, vector,deque, map,set 区别与用法比较

c++ list, vector,deque, map,set 区别与用法比较

thinker1213的博客 718

c++ set map list vector deque区别

stl容器区别: vector list deque set map-底层实现 stl容器区别: vector list deque set map (转) 在STL中基本容器有: vector、list、deque、set、map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set:集合, 用来判断某一个元素是不是在一个组里面,使

hello小工的专栏 686
上一篇: 利用javascript遍历JSON数据
下一篇: 轻量级C++插件框架
大鹏的NLP博客
博客等级 码龄16年 375粉丝 351原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值