学习总结:C++中STL的数据结构

2023-05-16

1.STL介绍

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

2.C++STL提供的数据结构

1. Sequence Containers:维持顺序的容器。


(a). vector:

动态数组,是我们最常使用的数据结构之一,用于 O(1) 的随机读取。因为大
部分算法的时间复杂度都会大于 O(n),因此我们经常新建 vector 来存储各种数据或中
间变量。因为在尾部增删的复杂度是 O(1),我们也可以把它当作 stack 来用。


(b). list:

双向链表,也可以当作 stack 和 queue 来使用。由于 LeetCode 的题目多用 Node 来
表示链表,且链表不支持快速随机读取,因此我们很少用到这个数据结构。一个例外
经典的 LRU 问题,我们需要利用链表的特性来解决,我们在后文会遇到这个问题。


(c). deque:

双端队列,这是一个非常强大的数据结构,既支持 O(1) 随机读取,又支持 O(1)
时间的头部增删和尾部增删,不过有一定的额外开销


(d). array:

固定大小的数组,一般在刷题时我们不使用。


(e). forward_list:

单向链表,一般在刷题时我们不使用。


2. Container Adaptors:基于其它容器实现的数据结构。


(a). stack:

后入先出(LIFO)的数据结构,默认基于 deque 实现。stack 常用于深度优先搜
索、一些字符串匹配问题以及单调栈问题。


(b). queue:

先入先出(FIFO)的数据结构,默认基于 deque 实现。queue 常用于广度优先
搜索。


(c). priority_queue:

最大值先出的数据结构,默认基于vector实现堆结构。它可以在O(n log n)
的时间排序数组,O(log n) 的时间插入任意值,O(1) 的时间获得最大值,O(log n) 的时
间删除最大值。priority_queue 常用于维护数据结构并快速获取最大或最小值


3. Associative Containers:实现了排好序的数据结构。


(a). set:

有序集合,元素不可重复,底层实现默认为红黑树即一种特殊的二叉查找树
(BST)。它可以在 O(n log n) 的时间排序数组,O(log n) 的时间插入、删除、查找任
意值,O(log n) 的时间获得最小或最大值。
这里注意,set 和 priority_queue 都可以用
于维护数据结构并快速获取最大最小值,但是它们的时间复杂度和功能略有区别,如
priority_queue 默认不支持删除任意值,而 set 获得最大或最小值的时间复杂度略高,具
体使用哪个根据需求而定。


(b). multiset:

支持重复元素的 set。

(c). map:

有序映射或有序表,在 set 的基础上加上映射关系,可以对每个元素 key 存一个
值 value。


(d). multimap:

支持重复元素的 map。


4. Unordered Associative Containers:对每个 Associative Containers 实现了哈希版本。


(a). unordered_set:

哈希集合,可以在 O(1) 的时间快速插入、查找、删除元素,常用于快
速的查询一个元素是否在这个容器内。


(b). unordered_multiset:

支持重复元素的 unordered_set。


(c). unordered_map:

哈希映射或哈希表,在 unordered_set 的基础上加上映射关系,可以对
每一个元素 key 存一个值 value。
在某些情况下,如果 key 的范围已知且较小,我们也
可以用 vector 代替 unordered_map,用位置表示 key,用每个位置的值表示 value。


(d). unordered_multimap:

支持重复元素的 unordered_map。

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

学习总结:C++中STL的数据结构 的相关文章

随机推荐

  • 软件工程—— 学校人力资源管理系统说明

    课程设计内容 1 设计目的 人力资源管理系统 是事业单位最基本的人事管理系统 用户可以通过该系统 xff0c 管理事业单位内部职工的档案 进行人事考勤 xff0c 准确无误地记录职工的出勤情况 xff1b 全自动生成职工的工资表 xff0c
  • 梯度下降方法中的学习率(learning rate), 衰减因子(decay) 冲量(momentum)

    本文总结自如下两个链接的内容 xff0c 建议读者直接阅读链接中的文章 1 https www jianshu com p 58b3fe300ecb 2 https www jianshu com p d8222a84613c 学习率 学习
  • Linux下Python 缩进 SyntaxError: 'break' outside loop

    这段代码将会报错 xff0c SyntaxError 39 break 39 outside loop 因为Python要求严格缩进 xff0c while循环的内容所有都必须缩进一空格 while循环体覆盖了剩下所有代码 因为if els
  • Linux ZRAM的简单介绍

    1 概念 zram 又称内存压缩 xff0c Linux kernel会把不常用的内存进行压缩 xff0c 以换出更多的内存供系统使用 平时空闲时候会做压缩 xff0c 以备不时之需 kernel 申请不到内存 xff0c 会触发压缩机制
  • 07 - 如何查看镜像及MySQL各环境参数的说明(Docker系列)

    本文章来自 知识林 在 06 分析docker run hello world xff08 Docker系列 xff09 一文中看到了docker run hello world xff0c 也描述了hello world是镜像名称 xff
  • Bootloader 相关概念理解及测试用例设计

    一 什么是Bootloader 单看单词 xff1a boot v 启动 xff1b loader n 装货设备 xff0c bootloader存在的意义就是指更新App程序 xff0c 以下简称bl 在14229规范中的Boot Sof
  • PixHawk飞控 配置参数

    PixHawk飞控 PixHawk是著名飞控厂商3DR推出的新一代独立 开源 高效的飞行控制器 xff0c 前身为APM飞控 xff0c 不仅提供了丰富的外设模块和可靠的飞行体验 xff0c 有能力的爱好者还可在其基础上进行二次开发 第一次
  • strcat函数--字符串连接函数

    strcat是STRing CATenate 字符串连接 xff09 的缩写 xff0c 调用strcat函数首先要有 lt string h gt 这个头文件 xff0c 它的作用是把两个字符数组中的字符串连接起来 xff0c 把字符串2
  • 最新使用深度相机D435i运行Vins-fusion并建立octomap八叉树栅格地图

    目录 一 xff0c 软件安装 二 xff0c 配置参数 三 xff0c 使用Vins fusion建立Octomap 四 xff0c 使用 DenseSurfelMapping建立Octomap 先决条件 Ubuntu 64 bit 16
  • 2022-10-13 js中数组删除对象

    JavaScript splice 方法 说明 xff1a splice 方法可删除从 index 处开始的零个或多个元素 xff0c 并且用参数列表中声明的一个或多个值来替换那些被删除的元素 数组 splice 数组索引下标 个数len
  • mmcv 报错undefined symbol: _ZNK2at6Tensor7is_cudaEv

    gt gt gt from mmcv ops import nms Traceback most recent call last File 34 lt stdin gt 34 line 1 in lt module gt File 34
  • 学校人力资源管理系统可行性分析

    学校人力资源管理系统可行性分析 一 技术可行性 硬件实施的可行性 xff0c 学校电脑配置相对较高 xff0c 可满足信息系统运行的需要 xff1b 学校可以采用常用的数据库应用程序开发工具实现学校内部的业务管理是完全可行的 xff0c 不
  • Jetson TX2 刷机教程(JetPack4.2版本)

    自从NVIDIA出现JetPack4 2 Ubuntu18 04 版本之后 xff0c 安装方式和之前就大不相同 xff0c 看了前面的几个安装版本之后 xff0c 感觉新版的好像安装起来更加简洁了 xff0c 只需要一个SDK就可以 xf
  • FactSystem设计思路

    Fact System 模块设计思路与学习总结 组成结构 FactSystem xff08 事件系统 参数系统 xff09 FactControls xff08 事件控制 xff09 FactPanelController xff08 事件
  • GPS设计思路

    GPS模块设计思路与学习总结 1 组成结构 Drivers src xff08 驱动程序资源包 xff09 gps helper xff08 GPS助手 xff09 ubx xff08 UBX协议 xff09 RTCM RTCMMavlin
  • ipv4和ipv6的区别

    ipv4 和ipv6 的区别本质在于它们的二进制表示位数 xff0c ipv4是用32位0 1序列来表示的 xff0c 而ipv6使用128位0 1序列来表示的 ipv4用32位 xff0c 为了方便人类记录和阅读 xff0c 我们通常将i
  • PHP字符串函数strrev(反转字符串)

    在PHP中 xff0c 字符串函数 strrev 用来反转字符串 函数语法 xff1a strrev string string string 函数参数说明 xff1a 参数描述string必需 规定要反转的字符串 strrev 用来反转字
  • STL(标准模板库)中class并不一定是“类”

    在模板库里面 xff0c 可谓 处处 皆模板 xff0c 当然了不是模板就不叫模板库了 xff0c 但是有一点经常让人忽视 xff0c 使用模板时候 xff0c 类就真的时候类 xff1f 也就是说class就真的是类 xff1f 答案是否
  • VS2008 和 MatlabR2015a 混合编程

    唉 xff0c 在做支持向量机分类优化实验的时候 xff0c 支持向量机的c 代码写的头疼 有些核函数和分类训练函数不会写 xff0c 搞得头疼 后来听同学介绍说matlab里面有包直接可以用 xff0c 我又去载了一个R2015a最新的m
  • 学习总结:C++中STL的数据结构

    1 STL介绍 STL xff08 Standard Template Library xff09 xff0c 即标准模板库 xff0c 是一个具有工业强度的 xff0c 高效的C 43 43 程序库 它被容纳于C 43 43 标准程序库