一、简单介绍
- STL是C++的标准模板库,它给我们提供了一些常用的数据结构和算法,比如说像向量容器vector,列表list。
- STL有下面四个组件:
1、容器
2、迭代器
3、函数对象
4、算法
二、容器
-
什么是容器?
简单的来说,容器 container 就是包含一组元素的对象。 -
容器有两种基本类型:
1、顺序容器:
一组相同类型的元素按照线性形式组织起来,比如说向量vector、队列deque、列表list它们就属于顺序容器;
2、关联容器:
可以根据索引来快速提取元素,比如集合set和映射map。 -
不同的要用不同的头文件,例如向量的是
#include<vector>
,而list的是#include<list>
。
三、迭代器
- 迭代器 iterator 它给我们提供了顺序访问容器中的元素的方法,可以用++来获取指向下一个元素的迭代器,可以用*访问迭代器所指向的元素,有的迭代器也可以通过–获取上一个元素的迭代器。
- 我们所熟悉的指针其实就是一种迭代器,而迭代器是泛化的指针哦;
- 如果访问的元素是类或者结构体类型的话,可以用->来访问这个元素的一个成员。
- 迭代器也有专门的头文件
#include<iterator>
四、函数对象
- 函数对象 function object 其实就是一个对象,他的行为和函数的对象是类似的,调用它就像调用函数一样调用即可
- 和其他组件一样,函数对象也同样具有专门的头文件
#include<functional>
五、算法
- STL中包含了很多的算法,比如说有我们常见的排序算法、查找算法和置换算法等等,算法它本事其实是一种函数模板,算法从迭代器那里获得一个元素,而迭代器知道一个元素在容器中的什么位置,因此,算法根本不必知道元素在容器中的位置,也可以不用知道容器的种类;
- 这些算法都具有统一性可以应用于不同的对象和内置的数据类型。
- 算法是建立在容器和迭代器基础之上的。
- STL中几乎所有算法的头文件都是
#include<algorithm>
。
六、小结
- 在STL中,迭代器作为算法的参数,通过迭代器访问容器,而不受把容器直接当作算法的参数;
- 函数对象作为算法的参数而不是将函数所执行的运算当作算法的一部分。
- 用STL提供或者自定义的迭代器和函数对象,再加上算法,我们可以构造出各种不同的功能,可见STL具有很高的灵活性,通过使用STL会使我们方便许多,也可减少代码的复杂度。