C++容器之概览

目录

  • 1 概述
  • 2 分类
    • 2.1 前向迭代器容器
    • 2.2 双向迭代器容器
    • 2.3 随机访问迭代器容器
    • 2.4 容器适配器
    • 2.5 位集

1 概述

在C++标准库中容器是通过模板实现的数据结构,多数可以通过迭代器统一访问,包括:

  • array
    数组是固定大小的序列容器:它们包含以严格线性序列排序的特定数量的元素。
    与其他标准容器不同,数组具有固定的大小,并且不通过分配器管理其元素的分配:它们是封装固定大小的元素数组的聚合类型。因此,它们不能动态地展开或收缩。

  • bitset
    位集存储位(只有两个可能值的元素:0或1,true或false)
    位集的大小在编译时是固定的(由其模板参数决定)。对于一个同时优化空间分配并允许动态调整大小的类,请参阅向量的布尔特化(vector<bool>)。

  • deque
    双端队列是具有动态大小的序列容器,可以在两端(前端或后端)进行扩展或收缩。
    对于涉及在除开头或结尾以外的位置频繁插入或删除元素的操作,与列表和前向列表相比,deques的性能更差,迭代器和引用的一致性也更低。

  • forward_list
    前向列表是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作
    前向列表被实现为单链表;单链表可以将它们所包含的每个元素存储在不同且不相关的存储位置。通过与序列中下一个元素的链接的每个元素的关联来保持排序

  • list
    列表是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作,以及双向迭代。
    列表容器被实现为双链表;双链接列表可以将它们所包含的每个元素存储在不同且不相关的存储位置。排序是通过与每个元素的关联在内部保持的,其中链接到它前面的元素,链接到它后面的元素。

  • map/multimap
    映射是关联容器,存储由键值和映射值的组合组成的元素,遵循特定的顺序。
    多重映射是关联容器,用于存储由键值和映射值的组合形成的元素,遵循特定顺序,并且其中多个元素可以具有等效键

  • queue/priority_queue
    队列是一种容器适配器,专门设计用于在FIFO上下文(先进先出)中操作,其中元素被插入容器的一端并从另一端提取标准容器类deque和list满足这些要求。默认情况下,如果没有为特定的队列类实例化指定容器类,则使用标准容器deque。
    优先级队列是一种容器适配器,专门设计为根据一些严格的弱排序标准,它的第一个元素始终是它所包含的元素中最大的一个。

  • set/multiset
    集合(set)是按照特定顺序存储唯一元素的容器。 在集合中,元素的值也标识它(值本身就是键,类型为T),并且每个值都必须是唯一的。集合中元素的值不能在容器中修改(元素总是常量),但可以从容器中插入或删除它们。
    多集(multiset)是按照特定顺序存储元素的容器,其中多个元素可以具有等效值。 在多集合中,元素的值也标识它(值本身就是键,类型为T)。多集合中元素的值不能在容器中修改(这些元素总是常量),但可以从容器中插入或删除它们。

  • stack
    栈是一种容器适配器,专门设计用于在后进先出(后进先出)环境中操作,其中元素仅从容器的一端插入和提取。

  • unordered_map/unordered_multimap
    无序映射是一种关联容器,用于存储由键值和映射值组合而成的元素,并允许基于其键快速检索单个元素。
    无序多重映射是关联容器,存储由键值和映射值的组合形成的元素,与无序映射容器非常相似,但允许不同的元素具有等效的键。

  • unordered_set/unordered_multiset
    无序集是不按特定顺序存储唯一元素的容器,允许根据单个元素的值快速检索这些元素。 无序集合容器比集合容器更快地通过关键字访问单个元素,尽管它们通常在通过元素子集进行范围迭代时效率较低。

    无序多集是不按特定顺序存储元素的容器,允许根据单个元素的值快速检索这些元素,与无序集容器非常相似,但允许不同的元素具有相同的值。

  • vector
    向量(vector)是序列容器,表示可以更改大小的数组。
    就像数组一样,向量为其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中一样高效。但与数组(array)不同的是,它们的大小可以动态变化,其存储由容器自动处理。

各容器类图:
容器类图

2 分类

2.1 前向迭代器容器

容器列表:

  • std::forward_list
  • std::unordered_map
  • std::unordered_multimap
  • std::unordered_set
  • std::unordered_multiset

特征:

  • 通过begin/end/cbegin/cend从前到后顺序访问元素。

2.2 双向迭代器容器

容器列表:

  • std::list
  • std::map
  • std::multi_map
  • std::set
  • std::multi_set

特征:

  • 通过begin/end/cbegin/cend从前到后顺序访问元素。
  • 通过rbegin/rend/crbegin/crend从后到前顺序访问元素。

2.3 随机访问迭代器容器

容器列表:

  • std::array
  • std::deque
  • std::vector

特征:

  • 通过begin/end/cbegin/cend从前到后顺序访问元素。
  • 通过rbegin/rend/crbegin/crend从后到前顺序访问元素。
  • 通过[]操作符随机访问元素,不做索引越界检查
  • 通过at函数随机访问元素,做索引越界检查,越界抛异常

2.4 容器适配器

容器适配器是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。
列表:

  • std::queue
  • std::priority_queue
  • std::stack

2.5 位集

位集是容器中唯一一个不是容器适配器,但不能通过迭代器访问的容器。
列表:

  • std::bitset

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AH股冲高回落,微盘股指数收盘重挫6%,半导体板块继续走强,工业富联涨停

低价股、地产、商业航天等板块深度回调,ST股批量跌停;半导体板块逆势上扬,工业富联涨停;航运、贵金属股反弹。 周四,A股三大指数午后跌幅加剧,上证指数收跌0.54%,创业板指跌0.71%。沪深两市成交…

文件传输基础——Java IO流

系列文章目录 文章目录 系列文章目录前言一、文件的编码二、File类的使用三、RandomAccessFile类的使用 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用…

动态IP基础解析:为什么我们需要它?

在深入探讨互联网世界的运作机制时,IP地址无疑是其核心要素之一。IP地址,作为网络设备的唯一标识,不仅确保了数据的准确传输,更是网络安全和管理的基石。本文将深入解析动态IP的基础知识,并探讨其重要性及在多种场景下…

【协同感知】Collaborative Perception in Autonomous Driving数据集与论文整理

Collaborative Perception in Autonomous Driving 目前最全的Collaborative Perception整理数据集协同感知论文-【三维目标检测】现实世界下的协同感知理想条件下的协同感知 目前最全的Collaborative Perception整理 https://github.com/Little-Podi/Collaborative_Perception…

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本 人生旅途,总有人不断地走来,有人不断地离去。当新名字变成老名字,当老的名字渐渐模糊,又是一个故事的结束和另一个故事的开始。 在现代软件开发中,持续集成/持…

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

《Navi日语社》App:日语学习与翻译的智能助手,支持日文OCR识别提取文字,无需打字对着说话就能翻译的日语语音翻译工具!

在全球化的今天&#xff0c;掌握一门外语已经成为许多人的必备技能。尤其是日语&#xff0c;不仅在学术、商务领域有着广泛的应用&#xff0c;也是许多旅行者和动漫爱好者的心头好。《Navi日语社》App&#xff0c;作为一款专为日语学习者和翻译需求者设计的移动应用&#xff0c…

书生·浦语大模型全链路开源体系-笔记作业4

XTuner 微调 LLM:1.8B、多模态、Agent 引自&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介绍 引自&#xff1a;欢迎来到 XTuner 的中文文档 — XTuner 0.1.18.dev0 文档 1.1. 什么是 XTuner &#xff1f; X…

四、Window整理右键扩展

一、桌面右键和文件右键扩展整理 简而言之整理下面图示内容 桌面右键&#xff1a; 对文件右键&#xff1a; 工具&#xff1a;火狐自带工具 二、新建扩展管理 简而言之整理下面图示内容 Win R输入regedit 寻找&#xff1a;计算机\HKEY_CURRENT_USER\Software\Microsof…

Padstack制作贴片和通孔焊盘

Padstack制作贴片和通孔焊盘 一、贴片焊盘制作 先选择SMD Pin&#xff0c;下面的pad geometry根据需求选择&#xff0c;一般是Circle和Rectangle&#xff0c;然后选择单位&#xff0c;mm制。 然后点击Design Layers&#xff0c;只需要修改Regular Pad常规焊盘就行&#xff0c…

【深度解析GPT-4o】:全面解析新一代AI技术的突破与优势

目录 ​编辑 1.版本对比&#xff1a;从GPT-3到GPT-4&#xff0c;再到GPT-4o的飞跃 1.1 模型规模的扩展 1.2 训练数据的更新 1.3 算法优化与效率提升 1.4 案例分析 2.技术能力&#xff1a;GPT-4o的核心优势 2.1 卓越的自然语言理解 2.1.1 上下文理解能力 2.1.2 语义分…

vscode运行Java utf-8文件中文乱码报错

问题现象 vscode 运行utf-8 java文,爆出如下错误 hello.java:5: &#xfffd;&#xfffd;&#xfffd;&#xfffd;: &#xfffd;&#xfffd;&#xfffd;&#xfffd;GBK&#xfffd;IJ&#xfffd;&#xfffd;&#xfffd;ӳ&#xfffd;&#xfffd;&#xfffd;ַ&a…

联想Y410P跑大模型

安装vs 2017 查看GPU版本 查看支持哪个版本的cuda windows cuda更新教程_cuda 12.0-CSDN博客 下载并安装cuda tookit 10.1 CUDA Toolkit 10.1 Update 2 Archive | NVIDIA Developer 找到下载的文件&#xff0c;安装 参考安装链接 Win10 Vs2017 CUDA10.1安装&#xff08;避坑…

20240606更新Toybrick的TB-RK3588开发板在Android12下的内核

20240606更新Toybrick的TB-RK3588开发板在Android12下的内核 2024/6/6 10:51 0、整体编译&#xff1a; 1、cat android12-rk-outside.tar.gz* | tar -xzv 2、cd android12 3、. build/envsetup.sh 4、lunch rk3588_s-userdebug 5、./build.sh -AUCKu -d rk3588-toybrick-x0-a…

ArUco与AprilTag 标签

一、简介 在许多计算机视觉应用程序中&#xff0c;姿势估计非常重要&#xff1a;机器人导航&#xff0c;增强现实等等。 该过程基于发现真实环境中的点与其2d图像投影之间的对应关系。 这通常是一个困难的步骤&#xff0c;因此通常使用合成或基准标记来简化操作。 最受流行的…

Github Copilot登录账号,完美支持chat

Github Copilot 代码补全等功能&#xff0c;提高写代码的效率 https://web.52shizhan.cn/activity/copilot 登录授权后&#xff0c;已经可以使用&#xff0c;完美。如图

OpenCv之简单的人脸识别项目(动态处理页面)

人脸识别 准备九、动态处理页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.定义视频处理脚本4.定义相机抓取脚本5.定义关闭窗口的函数6.按钮设计6.1视频处理按钮6.2相机抓取按钮6.3返回按钮 7.定义关键函数8.动态处理…

Web前端

Web前端&#xff1a; 1.建立web开发的息维模式写代码不仅仅是为了实现某个功能&#xff0c;更是学习解决问题的思维方式 2.先使用&#xff0c;再理解&#xff0c;会导致刚开始比较懵&#xff0c;不知其所以然.切忌不可深陷其中&#xff0c; 3.涉及简单的软件工程的设计思想&…

您的游戏端被攻击了怎么办,德迅云安全的应用加速来帮您

游戏行业DDoS攻击的主要原因是因为游戏产品生命周期偏短&#xff0c;而DDoS供给成本又不高&#xff0c;只要发起攻击&#xff0c;企业为确保游戏稳定运营而不得不快速做出让步&#xff0c;致使敲诈勒索的成功率相对更高。在遭受DDoS攻击后&#xff0c;游戏公司的日损失甚至多达…

AI 绘画零基础想入门学习AIGC,该如何学习呢?

近年来&#xff0c;随着人工智能的兴起&#xff0c;人工智能逐渐进入制造业、医疗、服务业等越来越多的行业。这些行业大多是劳动密集型行业&#xff0c;大多数人认为人工智能只能在劳动密集型行业执行任务&#xff0c;而创意领域是人工智能的禁区。但实际情况是&#xff0c;人…