0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++之STL库中的容器

汽车电子技术 来源:嵌入式情报局 作者:情报小哥 2023-02-21 10:55 次阅读

1、容器

前面跟大家介绍过STL库,STL主要是由6大部分组成,其中第一个提到的就是容器,容器在介绍STL中小哥有简单的跟大家介绍过,今天稍微再详细介绍一下。

首先需要看看STL中常用的一些容器及分类:

图片

所谓容器表面上的意思就是用于容纳数据,存储数据的对象。

从上图可以看出,基础的容器根据其所存储数据的形式分为顺序容器和关联容器。

顺序容器当然就是数据成员顺序存储的形式,是一种线性结构,每个数据成员都有固定的位置,所以成员都是按位置来进行存储,类似于C语言中的数组形式。

关联容器是一种非线性结构,没有严格的顺序,主要是按数值来进行存储,通常通过迭代器进行访问,迭代器目前可以简单理解为"指针"。

2、顺序容器

顺序容器主要是三种:vector、list和deque

vector向量,其操作方式类似于动态数组,并且可以像数组一样直接进行访问,且通常只在后端进行添加与删除数据,中间插入效率太低,如果vector向量空间不够,其会动态进行创建。

list双向链表,该链表与我们平常的链表数据结构类似,其索引性能较差,不能进行随机数据访问,不像vector可以直接进行数据访问,而是需要从头不断的进行遍历,但是双向链表list的优点在于可以轻松的向链表容器中插入数据。

deque双端队列属于vector与list的折中版本,支持这两者的大部分操作,不过其性能上都没有其他两种基本容器好。

图片

3、关联容器

关联容器主要有四种:map、set、multimap和multiset。

这些关联容器都是基于平衡二叉树来实现的,所以其也是一种链式存储方式,不过相比顺序存储从一条线上扩展到了一个面。

当需要在中间插入元素的时候,对于vector是最慢的,list当然是最快的,而对于关联容器采用二叉树结构,中间插入元素所要改变的关系相比vector要少很多,但比list要多一些。

而对于数据元素的检索,vector无疑是最快的,list当然是最慢的,但对于关联容器其检索效果虽然比不过vector,但由于二叉树的结构查找速度比list要快很多,所以这也就是set容器的优势。

而对于map采用一种key与value的映射关系,相比vector用数字下标进行索引,map能够提供一种用字符来索引的功能,这也就是他的特点,当然也可以理解set是一种key与value相等的map。

而对于mulitset与multimap仅仅只是在set和map容器的元素唯一性上进行了可以不唯一的扩展。

4、容器适配器

首先容器适配器并不是容器,而是通过封装或限制容器的接口构造一些有特殊用途的适配器结构。

STL中主要包含三种适配器:

stack---栈,先进后出

queue--队列,先进先出

priority_queue--优先级队列

相比普通队列,优先级队列在插入时会根据关键词自动排序,出队列会按照排列顺序优先出队列。

这些容器适配器也可以通过选择不同的基础容器来实现,一般情况下会选择默认容器来进行适配,当然也可以进行手动修改,但不是每种适配器都可以由任意基础容器来进行实现,毕竟每种基础容器存在一些功能上的限制。

最 后

好了,这里小哥就简单介绍了STL中的容器和容器适配器的整体介绍,后面会对每个容器举例介绍,本系列文章后续还会更新,记得关注学习哦。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21876
  • STL
    STL
    +关注

    关注

    0

    文章

    85

    浏览量

    18212
收藏 人收藏

    评论

    相关推荐

    C++STL算法(二)

    C++STL算法(二)
    的头像 发表于 07-18 14:49 652次阅读
    <b class='flag-5'>C++</b>之<b class='flag-5'>STL</b>算法(二)

    c++STL算法(三)

    c++STL算法(三)
    的头像 发表于 07-18 15:00 872次阅读
    <b class='flag-5'>c++</b>之<b class='flag-5'>STL</b>算法(三)

    C++零基础教程STL容器stack容器,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:27:23

    C++零基础教程STL容器tuple,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:29:21

    C++零基础教程STL容器initializer_list,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:30:27

    C++零基础教程STL容器bitset,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:31:34

    C++零基础教程STL容器queue容器,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:41:21

    C++零基础教程STL容器deque容器,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:41:55

    C++零基础教程之STL容器bitset,轻松上手C++ STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 12:21:40

    【上海】诚聘C/C++开发工程师(数据方向)

    2年以上C/C++开发工作经验;2. 有 Qt Widgets 开发经验优先;3. 有嵌入式上数据开发经验优先;4. 掌握C/C++
    发表于 07-14 12:22

    C/C++开源及示例代码简介

    C/C++ 开源及示例代码Table of Contents说明1 综合性的2 数据结构 & 算法2.1 容器2.1.1 标准
    发表于 08-20 08:23

    详细剖析C++的的3种容器

    容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言中特别重要,甚至它被认为是早期面向对象语言的基础。在现在几乎所有的面向对象的语言中也都伴随着一个容器集,在C++ 中,就是标准
    的头像 发表于 01-09 12:57 4640次阅读
    详细剖析<b class='flag-5'>C++</b>的的3种<b class='flag-5'>容器</b>

    一文带你手撕 STL 容器源码(上)

    前言源码之前,了无秘密。 在 STL 编程中,容器是我们经常会用到的一种数据结构,容器分为序列式容器和关联式容器。 两者的本质区别在于
    的头像 发表于 04-30 15:59 1179次阅读
    一文带你手撕 <b class='flag-5'>STL</b> <b class='flag-5'>容器</b>源码(上)

    C++ STL基本概念是什么

    STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
    的头像 发表于 02-27 15:56 1058次阅读
    <b class='flag-5'>C++</b> <b class='flag-5'>STL</b>基本概念是什么

    C++STL容器中的常见容器及基本操作

    一、什么是容器? 所谓容器,就是可以承载,包含元素的一个器件,它是STL六大组件之一,是容器、算法、迭代器中最重要也是最核心的一部分。 二、STL
    的头像 发表于 11-10 11:23 242次阅读
    <b class='flag-5'>C++</b>中<b class='flag-5'>STL</b><b class='flag-5'>容器</b>中的常见<b class='flag-5'>容器</b>及基本操作