STL不同容器的优缺点

2023-05-16

一、容器的分类
1、序列容器
(1)vector
典型的序列容器,任意元素的读取、修改具有O(1),在序列尾部进行插入、删除是O(1),但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。

(2)deque
序列容器,内存也是连续的,和vector相似,区别在于在序列的头部插入和删除操作也是O(1), 可以 在任何位置插入新元素,有随机访问功能。

(3)list
序列容器,内存是不连续的,任意元素的访问、修改时间复杂度是O(n),插入、删除操作是O(1), 可以在任何位置插入新元素。

2、关联容器
(1)set
关联容器,元素不允许有重复,数据被组织成一棵红黑树,查找的速度非常快,时间复杂度是O(logN)

(2)multiset
关联容器,和set一样,是允许有重复的元素,具备时间复杂度O(logN)查找功能。

(3)map
关联容器,按照{键,值}方式组成集合,按照键组织成一棵红黑树,查找的时间复杂度O(logN),其中键不允许重复。

(4)multimap
和map一样,区别是键可以重复

3、容器适配器

二、使用中需要考虑的一些因素
1、需要添加大量元素
不适合用vector,因为vector底层是数组,当前容量不足时就要扩容,将所有旧元素全部拷贝到新内存中,开销太大

适合用list
deque是vector和list的折中,内存不够时需要申请新内存但不用拷贝旧数据

2、查找速度
 对于序列容器需要分两种情况,区分依据是元素是否排序
 1)对于已经排序的序列容器,使用binary_search可以获得对数时间复杂度的查找速度(O(logN));
 2)而未排序的序列容器二分查找肯定是用不了,能达到的最好的时间复杂度是线性的(O(n))。

对于关联容器,存储的时候存储的是一棵红黑树,总是能达到对数时间复杂度(O(logN))的效率,因为关联容器是按照键值排好序的。

3、内存是否连续
vector、deque是连续内存的,其中vector是完全连续内存,而deque是vector和list的折中实现,是多个内存块组成的,每个块中存放的元素连续内存,而内存块又像链表一样连接起来。所以需要考虑在操作的过程中是否有在任意位置插入元素的需求,有这种需求的话尽量避免使用连续内存的vector、deque

4、元素的排序
序列容器是不会自动排序的,而关联容器通过键值对根据某种关系进行排序;所以默认情况下序列容器中的元素是无序的,而关联容器中的元素是有序的。

三、具体使用
在实际使用过程中,到底选择这几种容器中的哪一个,可以根据以下原则:

1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector;

2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用list;

3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用deque;

4、如果打算存储数据字典,并且要求方便地根据key找到value,一对一的情况使用map,一对多的情况使用multimap;

5、如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用set,不唯一存在的情况使用multiset。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL不同容器的优缺点 的相关文章

随机推荐

  • 多智能体系统集群协同控制实验平台详解与典型案例

    目录 一 机器人实验是智能体集群研究必要手段 二 动作捕捉系统解决智能体集群实验系统多个痛点 三 多智能体集群协同控制实验平台 1 Crazyswarm多无人机集群编队实验平台 2 Robotarium机器人平台 3 中科院自动化所智能集群
  • NOKOV度量动作捕捉协助完成无人机室内定位研究

    随着工业发展 技术进步 xff0c 无人机的使用在各行各业愈发普遍 xff0c 开始出现无人机飞行送外卖 智能无人机自主巡检等多方面应用 在这一过程中 xff0c 无人机飞行定位就成为了重中之重 西北工业大学无人机特种技术国防科技重点实验室
  • 光学动作捕捉系统构成

    一套光学动作捕捉系统由红外动作捕捉镜头 动作捕捉软件 反光标识点 POE交换机 和若干配件组成 xff08 如标定框和镜头固定装置等 xff09 其本质是定位系统 xff0c 通过计算分析 xff0c 来获取与其相关的速度 加速度等多种运动
  • vscode命令行起本地服务,可发送http请求

    在我们vscode中默认打开的是file协议 xff0c 但是往往我们会有ajax等请求 xff0c 需要发送http等其他协议 xff0c 所以我们需要搭起本地服务器 xff1a 1 xff1a cd 进去到文件位置 xff0c 运行 n
  • 动作捕捉用于仿生机器人的运动规划

    随着机器人 三维动画 虚拟现实等产业的发展 xff0c 关于仿生机器人的动作研究早已成为重要的热点课题 如何让机器人或虚拟人物做出合理 流畅的姿态呢 xff1f 这就要涉及到逆运动学算法研究 人体很复杂 xff0c 传统算法需优化 由于人体
  • 智能化人机协作 遮挡情况下准确识别目标信息

    研究背景 废旧产品 xff08 end of life products xff09 的拆卸是工程全生命周期管理的一个基本步骤 在减少资源消耗和温室气体排放的同时 xff0c 回收可重复使用的部件可能创造相当的经济价值 xff0c 同时也能
  • 线下·香港 | 工业大数据与智能系统前沿会议

    由香港理工大学主办的工业大数据与智能系统前沿会议将于2023年4月28日至5月1日在香港举行 届时来自海外 内地及香港的知名科学家将聚首 xff0c 将围绕大会主题 面向人机共融的工业转型 发表演讲 xff0c 分享他们的独到见解并探讨最新
  • 人机耦合模型研究及其在下肢外骨骼机器人设计中的应用

    在外骨骼研究中 xff0c 一个合适的人机耦合模型非常重要 xff0c 它可以帮助预测外骨骼系统直接作用于人体产生的影响 xff0c 避免不必要的伤害和能量损失 xff0c 同时也有助于优化外骨骼系统的设计和控制 xff0c 提高其佩戴的舒
  • STM32】 DMA原理,步骤超细详解,一文看懂DMA

    如需转载请注明地址 xff1a https blog csdn net as480133937 article details 104927922 DMA的基本介绍 什么是DMA DMA的基本定义 DMA xff0c 全称Direct Me
  • float类型数据在报文中的传输方法

    方法1 xff1a 转化成整型传输 假如保留float类型数据为两位小数 xff0c 我们可以将float数据 100 转换成整型数据传输 xff0c 对端收到后 xff0c 再 100 xff0c 转换成float类型 方法2 xff1a
  • 101、104规约解析

    转载 xff1a 电网101 104规约解析 xff08 Java xff09 张二狗和苗翠花的博客 CSDN博客 iec101 java 1 前言 最近在研究广东电网的101与104规约 xff0c 也就是DL T634 5101 200
  • Ubuntu:Python多版本切换。

    使用 update alternatives更改系统Python版本 1 查看可选版本 sudo update alternatives list python 如果提示 xff1a update alternatives error no
  • ROS(melodic)安装问题汇总及解决方法

    终于装上了ROS xff0c 费了很大的波折 xff0c 基本上能遇到的问题都遇到了 xff0c 记在这里希望能给遇到同样问题的朋友一点参考 首先是在虚拟机上装ubuntu 18 04 xff0c 这个没什么问题 xff0c 所用的镜像文件
  • Http请求出现invalid http response问题的原因分析

    发生场景 xff1a A系统发送Http请求调用B系统提供的接口 xff1b 发生问题 xff1a A系统报错 xff0c 提示 invalid http response 错误信息 xff1b 问题分析 xff1a 根据翻译 xff0c
  • STM32利用CUBEMX建立自定义HID工程,并且完成64字节的IN,OUT传输功能。

    STM32 Customed HID开发流程 本文介绍的是STM32的cubeMX自定义HID的开发流程 cubeMX配置customed HID模式 更多详细配置壳查看代码CubeMX的配置文件 修改usbd custome hid if
  • STM32 uart 单线半双工模式(cube版本)

    STM32 uart 单线半双工模式 xff08 cube版本 xff09 1 引言 在某些场合下需要进行三线制串口通信 xff08 信号线只有一根 xff09 xff0c 这就要求进行单线半双工的模式进行通信 在这种情况进行数据协议传输的
  • AS5600磁编码器开发记录

    AS5600使用简介 xff08 程序员版 xff09 本文由 智御电子 提供 xff0c 同时提供范例教程 xff0c 以便电子爱好者交流学习 前言 xff1a 最近由于工作需要接触到AS5600这颗磁角度传感器 xff0c 以前就对相关
  • STM32 硬件UART接收超时检测设置

    STM32 硬件UART接收超时检测设置 本文作者 智御电子 xff0c 期待与电子爱好者交流学习 应用场景 在uart应用中有时候需要进行双工通信 xff0c 主机需要对从机的数据进行接收超时检测 xff0c 例如modbus协议 xff
  • 发送GET请求 示例

    发送GET请求 64 param url 请求地址 64 param param 请求参数 64 param headers 64 return private String requestByGet String url Map lt S
  • STL不同容器的优缺点

    一 容器的分类 1 序列容器 xff08 1 xff09 vector 典型的序列容器 xff0c 任意元素的读取 修改具有O 1 xff0c 在序列尾部进行插入 删除是O 1 xff0c 但在序列的头部插入 删除的时间复杂度是O n xf