一、什么是标准模板库STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
二、STL用来干嘛
简单粗俗地来说,就是用来偷懒的。STL为我们提供了很多已经定义好了的函数,在实现某些功能的时候,我们只需要调用相应的函数就行了,而不用手动去实现所需功能的一系列细节操作。
三、STL六大组件
组件 | 含义 |
---|---|
容器 | 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等,用来存放数据 |
算法 | STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 中,少部分位于头文件 中。算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 |
迭代器 | 在C++STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。容器和算法之间的桥梁 |
函数对象 | 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。 |
适配器 | 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。容器、迭代器和函数都有适配器。 |
内存分配器 | 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。 |
四、容器
(一)容器的定义
容器是用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL中都被实现为容器。
(二)容器的分类
大分类 | 小分类 | 特点 | 功能 |
---|---|---|---|
序列容器 | / | 强调元素的位置,序列式容器中每个元素都有固定的位置,和元素值无关 | 主要包括 vector 向量容器、list 列表容器以及 deque 双端队列容器 |
关联容器 | 排序容器 | 排序容器中的元素默认是由小到大排序好的,新插入元素,元素也会插入到适当位置 | 包括 set 集合容器、multiset多重集合容器、map映射容器以及 multimap 多重映射容器 |
哈希容器 | 哈希容器中的元素是未排序的,元素的位置由哈希函数确定 | C++ 11 新加入 4 种关联式容器,分别是 unordered_set 哈希集合、unordered_multiset 哈希多重集合、unordered_map 哈希映射以及 unordered_multimap 哈希多重映射 |
五、算法
(一)算法的定义
通过有限的步骤解决问题的方法
(二)算法的分类
分类 | 特点 |
---|---|
质变算法 | 在运算的过程中,会改变区间内元素的内容。例如:替换、删除 |
非质变算法 | 在运算的过程中,不会改变区间内元素的内容。例如:查询、技术 |
六、迭代器
(一)迭代器的定义及作用
用来遍历容器中的元素
注意:每种容器都有自己所对应的迭代器
(二)迭代器的分类
分类 | 功能 | 支持运算 |
---|---|---|
输入迭代器 | 对数据的只读访问 | ++、==、!= |
输出迭代器 | 对数据的只写访问 | ++ |
前向迭代器 | 对数据可以进行读写操作,向前推进 | ++、==、!= |
双向迭代器 | 对数据可以进行读写操作,向前或后推进 | ++、– |
随机访问迭代器 | 对数据可以进行读写操作,可以访问任意位置的数据 | ++、–、[n]、-n、<、<=、>、>= |
参考资料:
https://www.runoob.com/cplusplus/cpp-stl-tutorial.html
http://c.biancheng.net/stl/