STL- 容器特点总结

2023-05-16

  • 关于 STL
  • 1. 序列式容器
  • 2. 关联式容器
  • 3. 容器适配器

关于 STL

  • STL即标准模板库(Standard Template Library)。
  • STL包含 6大组件+13个头文件。

  六大组件:容器算法迭代器仿函数适配器分配器
  这六大组件的交互关系:
     container(容器) 通过 allocator(配置器) 取得数据储存空间。
     algorithm(算法)通过 iterator(迭代器)存取 container(容器) 内容。
     functor(仿函数) 可以协助 algorithm(算法) 完成不同的策略变化。
     adapter(配接器) 可以修饰或套接 functor(仿函数)。

  • 通常来说 STL 的核心三个组件是容器、算法、迭代器。这三个组件包含了诸多常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

1. 序列式容器

  • 特点: 元素在容器中的位置与元素的值无关,将元素插入容器时,指定在什么位置,元素就会位于什么位置。
  • 序列是容器有: arrayvectordequelistforward_list


I. vector

  • 采用连续存储结构,底层通过数组实现,当内存空间不够时,会重新申请一块足够大的内存,把旧内存空间中的所有元素都拷贝进新内存空间中去,同时释放旧的空间。GCC是二倍扩容,VS13是1.5倍扩容
  • 插入: push_back、emplace_back,复杂度O(1)
        insert、emplace,复杂度O(N)
  • 删除: pop_back,复杂度O(1)
        erase,复杂度O(N)
  • 存取: operator=、at、front、back,复杂度O(1)

II. deque

  • deque双端队列,底层采用多个连续的存储块,在一个映射结构中对这些内存块及顺序进行跟踪。
  • 插入: push_back、push_front、emplace_back、emplace_front,复杂度O(1)
        insert、emplace,复杂度O(N)
  • 删除: pop_back、pop_front,复杂度O(1)
        erase,复杂度O(N)
  • 存取: operator=、at、front、back,复杂度O(1)

III. list

  • List使用非连续的内存空间进行存储,具有双链表结构,不支持根据下标随机存取元素。
  • 插入: push_back、push_front、emplace_back、emplace_front、insert、emplace,复杂度O(1)
  • 删除: pop_back、pop_front、erase,复杂度O(1)
        remove、remove_if、unique,复杂度O(N)
  • 存取: front、back, 复杂度O(1)
        查找元素需要遍历容器,复杂度O(N)

2. 关联式容器

  • 特点: 当元素被插入到关联式容器中时,元素位置取决于容器内部特定规则的排序准则以及元素值,和插入次序无关
  • 序列是容器有: setunordered_setmultisetunordered_multiset 以及 mapunordered_mapmultimapunordered_multimap


I. set

  • set内部采用红黑树实现,容器内部的数据都是有序的,容器中元素的值不能在容器进行修改,但可以对元素进行插入、删除操作。元素值本身val 就是键-key。因此容器中元素是唯一的。
  • 插入: insert、emplace、emplace_hint,复杂度O(logN)
  • 删除: erase,复杂度O(logN)
  • 查询: find、count,复杂度O(logN)

II. unordered_set

  • unordered_set内部基于哈希表实现,容器内部的数据都是无序的,容器中元素的值不能在容器进行修改,但可以对元素进行插入、删除操作。元素值本身val 就是键-key。因此容器中元素是唯一的。
  • 插入: insert、emplace、emplace_hint,复杂度O(1)
  • 删除: erase,复杂度O(1)
    查询: find、count,复杂度O(1)

III. map

  • map内部采用红黑树实现,容器内部元素是有序的,且元素都是成对出现,.first 是关键字(key),容器中key具有唯一性。.second是该关键字的值(value)
  • 插入: insert、emplace、emplace_hint,复杂度O(logN)
  • 删除: erase,复杂度O(logN)
  • 查询: find、count,复杂度O(logN)


Ⅳ. unordered_map

  • unordered_map内部基于哈希表实现,容器内部元素无序,且元素都是成对出现,.first 是关键字(key),容器中key具有唯一性。.second是该关键字的值(value)。
  • 插入: operator[]、insert、emplace、emplace_hint,复杂度O(1)
  • 删除: erase,复杂度O(1)
  • 访问: find、count、at、operator[],复杂度O(1)

3. 容器适配器

  • 特点: 容器适配器是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同的功能。
  • 序列是容器有:
  • stack:是一个封装了 deque<T> 容器的适配器类模板,默认实现的是一个先入后出(LIFO)的压入栈。
  • queue:是一个封装了 deque<T> 容器的适配器类模板,默认实现的是一个先入先出(LIFO)的队列。可以为它指定一个符合确定条件的基础容器。
  • priority_queue:是一个封装了 vector<T> 容器的适配器类模板,默认实现的是一个会对元素排序,从而保证最大元素总在队列最前面的队列。


I. stack

  • stack是一个先进后出(FILO)的容器,故stack不提供元素的任何迭代器操作。容器只能从容器的一端(栈顶)进行插入、删除、访问操作。
  • 插入: insert、emplace,复杂度O(1)
  • 删除: pop,复杂度O(1)
  • 查询: top,复杂度O(1)

II. queue

  • queue是一个先进先出(FIFO)容器适配器,故 queue 不提供元素的任何迭代器操作。容器只能访问头元素和为元素。只能在容器的末尾添加新元素,只能从头部移除元素。
  • 插入: push、emplace,复杂度O(1)
  • 删除: pop,复杂度O(1)
    查询: front,复杂度O(1)

III. priority_queue

  • priority_queue内部保持堆结构(其内部默认是大顶堆),容器内部元素是有序的,容器只能访问头元素top()。只能在容器的末尾添加新元素,只能从头部移除元素。
  • 插入: emplace、push,复杂度O(1)
  • 删除: pop,复杂度O(1)
  • 查询: top,复杂度O(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL- 容器特点总结 的相关文章

随机推荐

  • uni-app嵌套H5,H5向uniapp传值

    HTML xff1a span class token doctype lt DOCTYPE html gt span span class token tag span class token tag span class token p
  • uniapp接入微信分享iOS总是跳转两次

    配置了N遍 xff0c 依旧跳转两次 xff0c 最终倒在了打包签名的方式上面 先打越狱包 xff0c 然后再进行签名 xff0c 这样的包iOS可以微信分享 xff0c 但是每次都是两次 直接打包正式包或基座包 xff0c iOS微信分享
  • uniapp中使用renderjs(一)

    uniapp中使用renderjs xff0c 基础调用和data值渲染 span class token operator lt span template span class token operator gt span span c
  • uniapp中使用renderjs(二)引入高德地图

    span class token operator lt span template span class token operator gt span span class token operator lt span view span
  • uniapp安卓打包证书制作,亲测可直接使用

    平常证书制作直接使用的安卓证书在线制作 xff0c 最近这个工具不能使用了 xff0c 现分享下证书制作过程和打包流程 uniapp安卓打包证书制作 xff0c 亲测可直接使用 尝试多次 xff0c 证书文件不是有效的keystore文件出
  • PHP原生开发demo

    好久没有用到原生PHP进行页面的开发了 xff0c 昨天帮忙写了一个 xff0c 不过脑子 xff0c 也没有封装 xff0c 像流水一样 xff0c 哈哈哈哈 span class token operator lt span span
  • 手机端预览pdf,兼容安卓iOS和pc端

    手机端预览pdf 兼容安卓iOS和pc端 pdf web viewer html 官方下载 https github com mozilla pdf js releases download v2 15 349 pdfjs 2 15 349
  • fiddler抓包APP查看接口请求响应信息

    1 安装夜神模拟器 2 下载fiddler https www telerik com download fiddler first run 3 设置fiddler的Connection接口为8888 4 设置同台电脑的模拟器的wlan的手
  • 详解NRF24L01无线收发模块

    近日有粉丝朋友留言 xff0c 希望介绍一下nRF24L01这款无线收发芯片 xff0c 正巧前不久的电赛有些涉及 xff0c 因此将自己的一些经验写在这里 xff0c 希望能有所收获 前面我们介绍过单片机的几种通信协议 xff0c 并且初
  • 可以替代树莓派4(raspberry pi 4B)的tinker board 2

    近几年 xff0c 随着国产芯片的飞速发展 xff0c 一批基于国产SOC的 xff0c 性价比高 xff0c 能运行Android Linux的开发板在市场上出现 xff0c 此前 xff0c 如果要用到Android Linux的开发板
  • 全国大学生电子设计竞赛参赛分享

    在你想要放弃的那一刻 想想为什么当初走到了这里 努力走自己喜欢且有意义的路 xff0c 遇见以后不平凡的自己 时隔九年 xff0c 再次回想起大学时候参见电子设计竞赛的经历 xff0c 依然历历在目 大赛简介 全国大学生电子设计竞赛 xff
  • Turtlebot 3 rplidar bringup

    Turtlebot 3上安装rplidar A1驱动并配置相关的sh及launch文件 xff0c 实现SBC端的bringup xff0c 以及PC上的rviz Turtlebot 3默认的雷达是HLS Hitachi LG Sensor
  • LiDAR 1 基础

    激光的形成过程 xff1a 原子内的电子有低能量状态和高能量状态 xff0c 低能量电子吸收能量进入高能量活跃态 xff0c 恢复低能量时发射光子 通过高电压在谐振腔内触发激光 不同的介质可以触发不同频段的激光 激光雷达使用的是红外波段的非
  • LiDAR 4 固态激光雷达 (Flash LiDAR)

    固态激光雷达分为Flash LiDAR和OPA Optical Phased Array LiDAR xff0c Flash LiDAR是非扫描式的 xff0c OPA LiDAR 是扫描式的 Flash LiDAR的发射光源和接收部件都是
  • LiDAR 5 相控阵激光雷达 (OPA LiDAR)

    OPA LiDAR相控阵激光雷达的技术核心是OPA scanner Quanergy S3激光雷达Transmitter OPA xff1a Leddar Tech OPA LiDAR模块 xff1a 相控阵Phase array实现方式
  • LiDAR 6 FMCW

    FMCW是TOF之外的另一种方式 xff0c 利用光波的调频实现目标的探测 光的波粒二象性 多普勒效应 系统架构 当系统的复杂程度上升后 xff0c 能够采集到的信息也更多 xff0c 包括距离和速度 采用OPA扫描的FMCW激光雷达设计
  • LiDAR 7 消费电子3D应用

    消费电子3D应用 Depth Camera xff0c AR Glass xff0c 类似 Microsoft Azure Kinect xff0c Intel RealSense xff0c iPhone iPad 等产品 Microso
  • LiDAR 8 激光雷达行业

    激光雷达应用的领域特别广泛 xff0c 在无人驾驶上的应用受到很大的关注 全球汽车领域激光雷达的厂商 xff0c 生态链厂商 xff0c 相信激光雷达在产品和技术上的发展还会有很广阔的天地
  • FOC - SVPWM

    FOC vector control 电机矢量控制FOC通过转子坐标系的转换 xff0c 实现动态电流控制 实现的几个环节 xff0c 相电流phase current gt Park Ialpha Ibeta gt Clarke Iq I
  • STL- 容器特点总结

    关于 STL1 序列式容器2 关联式容器3 容器适配器 关于 STL STL即标准模板库 xff08 Standard Template Library xff09 STL包含 6大组件 43 13个头文件 六大组件 xff1a 容器 算法