35、标准模板类(STL)(一),综述、容器及其操作

2023-05-16

C++的 STL 是一个功能强大的库,它是建立在模板机制上,能够满足用户对存储管理不同类型数据的通用容器和施加在这些容器上的通用算法的巨大需求,并且具有完全的可移植性。因此在寻求程序的解决方案时,应该首先在 STL 中寻求恰当的容器和算法。

STL 是一个通用性极高的编程工具,这种通用性不仅表现在可以使用通用的容器存储和管理任意类型的数据,更重要的是可以对不同的容器施加统一通用的算法和操作。实现这种通用性的关键思想就是:通过引进一个间接层对象对不同结构的数据容器进行统一的访问操作,从而简化了对容器的操作,使得实现操作的算法和函数通用化。这种思想是 STL 的设计原则之一,也是软件设计中一个重要设计思想。 在 STL 中对容器访问的简化和独立就是通过循环子实现的,循环子可以无须依据某种特定容器的数据结构而完成对容器元素的访问,从而使得数据的存储结构与施加于数据的操作相互独立。标准模板库 STL 是由容器类模板,用于访问这些容器的循环子类模板和可以通过循环子在这些容器上实现的各种算法类模板以及函数类模板组成的。STL 为这种标准算法和函数(包括用户定义的函数)借助循环子在容器上实现的应用建立了统一的规则。

容器:可容纳各种数据类型的数据结构。

迭代器:可依次存取容器中元素的东西,连接容器和算法

算法:用来操作容器中的元素的函数模板。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。

函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。

比如,数组int array[100]就是个容器,而 int * 类型的指针变量就可以作为迭代器,可以为这个容器编写一个排序的算法

一、容器

(一)容器综述

    标准库中定义了两种标准的容器:

1、序列容器(Sequence):向量 vector、表 list 和双向队列 deque。

vector:后部插入/删除,直接访问
deque:前/后部插入/删除,直接访问
list:双向链表,任意位置插入/删除

2、关联容器 (Associative container)

映射 map、multimap 和集合 set、multiset。

set:快速查找,无重复元素
multiset :快速查找,可有重复元素
map:一对一映射,无重复元素,基于关键字查找
multimap :一对一映射,可有重复元素,基于关键字查找

前两种合称为第一类容器。

3、序列转接器容器(又名容器适配器)(Sequence Adapter)

    是一种可以改变函数对象或容器接口的组件。

   序列转接器:堆栈 stack、队列 queue 和优先级队列priority_queue。

stack:LIFO
queue:FIFO
priority_queue:优先级高的元素先出 

对象被插入容器中时,被插入的是对象的一个复制品。

4、预定义数组、字符串类 string、数值数组类 valarray 和位集合 bitset 均可以视为容器,但不是标准容器。标准容器的成员绝大部分都具有共同的成员名。,

(1)类型成员

(2)循环子操作

(3)访问元素操作

 front():返回容器中第一个元素的引用,back():返回容器中最后一个元素的引用。比如,查 list::front 的help,得到的定义是:

reference front(); 

const_reference front() const;

list有两个front函数

reference 和 const_reference 是typedef的类型

对于 list<double> , 

 list<double>::reference  实际上就是 double &

 list<double>::const_reference  实际上就是 const double &

对于 list<int> , 

 list<int>::refrence  实际上就是 int &

 list<int>::const_refreence  实际上就是 const int &

(4)堆栈和队列操作

 push_back(): 在容器末尾增加新元素

 pop_back(): 删除容器末尾的元素

(5)表操作

(6)其他操作

(7)构造函数,析构函数

(8)分配操作

(9)关联操作

(10)标准容器的操作比较(复杂度)

表中各种容器所对应的表项的含义如下:

① 空表项:表示容器无此项操作。

② const:表示容器此项操作的时间复杂度为常量。

③ O(n):表示容器此项操作的时间复杂度与容器中元素个数n的线性相关。

④ O(n)+:表示容器此项操作的时间复杂度与容器中元素个数n线性相关并且还需要增加一些附加操作时间花费。

⑤ O(log(n)):表示容器此项操作的时间复杂度与容器中元素个数n对数相关。

⑥ O(log(n))+:表示容器此项操作的时间复杂度与容器中元素个数n对数相关并且还需要增加一些附加操作时间花费。

⑦ Ran:表示容器对应的循环子为随机访问循环子。

⑧ Bi:表示容器对应的循环子为双向访问循环子。

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

35、标准模板类(STL)(一),综述、容器及其操作 的相关文章

  • 工业通讯 | CAN基础内容详解(二)——物理层

    往期回顾 工业通讯 CAN基础内容详解 xff08 一 xff09 物理层主要完成设备间的信号传送 xff0c 把各种信号转换成物理信号 xff0c 并将这些信号传输到其他目标设备 在这一层中 xff0c CAN bus对信号电平 通信时使
  • 04ROS中的头文件与源文件

    ROS中的头文件与源文件 本节主要介绍ROS的C 43 43 实现中 xff0c 如何使用头文件与源文件的方式封装代码 xff0c 具体内容如下 设置头文件 xff0c 可执行文件作为源文件 xff1b 分别设置头文件 xff0c 源文件与
  • TX2系统安装

    手头新拿到块TX2 xff0c 从零开始搞 xff0c 特此记录以备后续查看 xff0d 2017 07 16 乐 参考官方网址 JetPack下载网址 准备刷机环境 下载JetPack L4T 3 1 linux x64 run pc环境
  • 单片机是嵌入式的子类

    1系统组成结构上的区别 xff08 1 xff09 单片机基本结构 单片机由运算器 控制器 存储器 输入输出设备构成 xff08 2 xff09 嵌入式系统成部分 嵌入式系统一般由嵌入式微处理器 外围硬件设备 嵌入式操作系统 特定的应用程序
  • STM32串口协议概念及结构体初始化详解+串口点灯+串口收发程序

    文章目录 一 串口通信协议简介1 RS232标准2 USB转串口3 原生的串口到串口 二 初始化结构体解1 USART初始化结构体2 同步时钟初始化结构体3 编程时需要用到的固件库函数 三 串口点灯代码实现1 USART C文件2 USAR
  • 无人机光流定位系列——(一)原理剖析

    这次参加深圳的高交会 xff0c 在qualcomm展区看到了多款mini无人机 xff0c 大家稍微细心一点就可以发现这些无人机都使用了一种叫光流定位的技术 xff0c 很多人可能都还不明白光流定位是个什么东西 xff0c 是如何进行定位
  • 现代控制理论2——状态空间分析法

    注 xff1a 本文是在MOOC平台上学习西北工业大学 现代控制理论基础 xff08 郭建国 赵斌 郭宗易 xff09 的课程进行随笔记录与整理 一 状态空间描述的相关概念 1 系统模型包括 xff1a 内部结构 xff0c 以及内部结构反
  • 输出调节——内模原理(1)

    浏览了百度和部分文献 xff08 主要为 xff1a 调节问题系统综述 xff0c 线性系统的内模原理 xff09 xff0c 在此尝试进行一些归纳 一 问题描述 输出调节问题 xff1a output regulation problem
  • RGB-D相机建图——2、openvins安装、测试与连接自己设备

    基础内容贴推荐 xff1a https zhuanlan zhihu com p 93814423 https blog csdn net weixin 39752599 article details 105906652 https zh
  • RGB-D相机建图——3、使用kalibr进行相机标定

    Kalibr 视觉惯性校准工具箱 官方网站 xff1a https github com ethz asl kalibr Kalibr是一个工具箱 xff0c 可以解决以下校准问题 xff1a 多摄像机校准 xff1a 具有非全局共享重叠视
  • 02.构建项目流程梳理及总结

    02 构建项目流程梳理及总结
  • Nuttx学习入门

    Nuttx学习 NuttX 是一个实时操作系统 RTOS xff0c 强调标准合规性和占用空间小 可从 8 位扩展到 64 位微控制器环境 xff0c NuttX 中的主要管理标准是 POSIX 和 ANSI 标准 NuttX 的主要环境依
  • 软件测试之如何介绍自己的项目

    测试人员在找工作的过程中 xff0c 通常有一个问题是很难绕开的 就是要如何向别人介绍自己之前做过的项目 要解决这个问题 xff0c 大致可以分为如下几个步骤 xff1a 1 对项目进行基本介绍 2 说明自己负责测试的模块 3 针对部分模块
  • FreeRTOS多任务管理

    文章目录 1 任务1 1 任务简介1 2 任务调度1 3 任务的状态 就绪态 运行态 阻塞态 挂起态 1 4 空闲任务 2 动态创建两个任务2 1 定义动态内存空间的堆2 2 定义任务函数2 3 定义 任务控制块 指针2 4 动态创建任务
  • 计算机类期刊投稿心得 [ 添加中...现35种 ]

    1 杂志名称 计算机应用研究 杂志文章包含专业 建模 xff0c 仿真 xff0c 网络 xff0c 人工智能 xff0c 比较杂 投稿联系方式 http www arocmag com 注册在线投稿审稿 投稿费用 250元 页 杂志级别
  • Minix下的汇编

    Minix下的汇编 大多数的编译器 xff0c 如Turbo C C 43 43 xff0c Borland C C 43 43 xff0c M C C 43 43 xff0c GCC xff0c VC 43 xff0c 编译过程都是 xf
  • 解决Xshell 7 报错 “要继续使用此程序,您必须应用最新的更新或使用新版本”

    1 先创建一个文本文档 xff0c 同时把该文档名称和后缀改为xshell7 bat xff1b 2 打开编辑这个xshell7 bat文件 xff0c 并且把以下文字复制进去 xff0c 注意set XSHELL 61 这一项需要改成你自
  • 多任务操作系统的任务切换

    在学习OS时 xff0c 对于多任务操作系统的任务切换 xff0c 一直不能理解 xff1a 控制权是怎么么回到调度程序上的 xff1f 记得在描述任务切换时 xff0c 一般都是这么描述的 xff1a 在每一个时钟滴答 xff0c 都将检
  • Minix下的汇编2

    似乎minix平台并没有带一个真正的汇编编译器 xff0c 看看makefile xff0c 几乎都是清一色的用cc来编译汇编代码的 而且 xff0c 即使是一个最简单功能的汇编程序 xff0c 也少不了一个 main 标签 在minix的
  • 原来在/var/spool/mail中

    fetchmail会把从mail server收到的邮件投递到 var spool mail 中去 而mutt也会自动地到 var spool mail里取信 xff0c 解码 xff0c 并显示 但 xff0c fetchmail的速度不

随机推荐