目录
1、什么是STL
2、STL六大组件
2.1容器
2.2算法
2.3迭代器
1、什么是STL
概念:
STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
通俗来说:STL就是将常见的数据结构(例如 顺序表,链表,栈,队列,二叉树,哈希...)以模板的形式进行封装,使用时,不用我们人为再去写,可以直接调用。并且包含常见的通用的泛型算法(一些常规的算法也不用自己实现,可以直接调用)。
STL从广义上分为:容器(container),算法(algorithm),迭代器(iterator),容器和算法之间通过迭代器进行无缝连接,STL几乎所有的代码都采用了模板类或模板函数
通用的泛型算法两大特性:
通用的:对于任意类型的数据结构都可以处理。(线性表,链表,二叉树....)
模板实现:以模板的方式实现,对于任意数据类型都可以处理。(int/double/short/long.....)
2、STL六大组件
STL大体分为六大组件,分别是:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器
2.1容器
来自百度百科的解释
容器是指用以容纳物料并以壳体为主的基本装置。常用作储存设备或其他化工设备的外壳。主要由壳体、封头、接管、法兰和支座组成。对容器的基本要求是:满足工艺需要;保证操作安全,包括具有足够的强度、刚度以及密封性;耐腐蚀,具有一定的使用寿命;便于制造、安装、维修和使用;成本低,材料节省,尤其要节约不锈钢和有色金属等贵重材料。容器在化工生产中应用广泛,按压力分有真空、常压、外压的压力容器,压力容器又可分低压、中压、高压及超高压容器;按温度分有常温、低温及高温容器;按筒体结构分有单层容器和多层容器;按工艺用途分有储存、分离、反应及换热容器;按厚度分有薄壁和厚壁容器。
STL中的容器就是将运用最为广泛的一些数据结构实现出来,常用的数据结构:数组,链表,树,栈,队列,集合,映射表等。
容器分为序列式容器和关联式容器两种。
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
- string:动态类型的顺序表----只能存储字符----字符串
- vector :动态类型顺序表
- array : 静态类型顺序表
- list:带头结点双向循环链表
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系
- ...
2.2算法
来自百度百科的解释
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。
STL中的算法分为质变算法和非质变算法:
质变算法:运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等等
- copy
- swap
- replace
- fill
- remove
- permulation
- partition
- sort
- ...
非质变算法:运算过程中不会更改区间内的元素内容,例如查找,计数,遍历,寻找极值等等
- find
- search
- count
- equal
- max
- min
- ...
2.3迭代器
来自百度百科的解释
迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。
迭代器是容器和算法之间的粘合剂,每个容器都有自己专属的迭代器。
种类 | 功能 |
输入迭代器 | 对数据的只读访问 |
输出迭代器 | 对数据的只写访问 |
前向迭代器 | 读写操作,并能向前推进迭代器 |
双向迭代器 | 读写操作,并能向前和向后操作 |
随机访问迭代器 | 读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器 |
常用的容器中迭代器种类为双向迭代器和随机访问迭代器。