文章目录
- 一、STL 算法概念
- 1、STL 算法头文件
- 2、STL 算法思想 - 数据与算法分离
- 3、STL 算法 迭代器
- 4、STL 算法 操作对象
- 二、STL 算法分类
一、STL 算法概念
1、STL 算法头文件
标准模板库 STL 算法 都定义在 <algorithm> , <numeric> 和 <functional> 三个头文件中 ;
使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ;
代码语言:javascript复制#include <algorithm>
#include <numeric>
#include <functional>
- <algorithm> 头文件 是 3 个 STL 算法头文件中 包含算法最多的一个 , 包含常用的 : 比较算法、交换算法、查找算法、遍历算法、复制算法、修改算法、反转算法、排序算法、合并算法 等 算法 ;
- <numeric> 头文件 包含的算法较少 , 这些算法 主要是 在 序列 上面进行简单数学运算 的模板函数 , 如 : 在 序列 上 执行 加减乘除 操作 ;
- <functional> 头文件 中 只 定义了一些模板类 , 这些模板类的作用是 声明函数对象 ;
STL 标准模板库 提供了 实现算法 的 模板函数 , 借助这些 模板函数 , 只需要几行代码 , 即可实现相应算法的复杂功能 , 极大地提升了开发效率 和 程序的可维护性 ;
2、STL 算法思想 - 数据与算法分离
STL 算法 的 核心思想是 将 算法 和 数据结构 分离 , 使得 算法 可以 独立于 数据结构 进行操作 ;
由于 STL 算法 都是 模板函数 , 算法 不直接操作 具体的数据类型 , 也就是说 STL 算法 可以 作用于 各种不同的 数据结构 , STL 算法的使用 提高了代码的 复用性 和 可维护性 ;
3、STL 算法 迭代器
STL 算法 通常 通过 迭代器 来 操作容器中的元素 ;
迭代器 类似于指针 , 指向容器中的元素 , 可以通过 * 解引用操作符 获取 迭代器指向的元素 ;
迭代器 可以用来 遍历容器中的元素 , 并对元素进行读写访问操作 ;
STL 容器 基本都定义了其本身所 专用的迭代器 , 用以访问容器中的元素 ;
4、STL 算法 操作对象
STL 算法 操作对象 是 " STL 容器中的元素 " , 所有的 STL 算法 , 操作 容器元素时 , 会将 STL 容器中的 内容 复制一份 , 对 容器中元素的 副本 进行操作 , 之后再将副本返回 ;
二、STL 算法分类
STL 算法分类 : 分为以下四类 ;
- ① 非可变序列算法 : 此类算法 不修改 STL 容器中的元素内容 , 如 : 搜索 / 计数 / 比较 操作 ;
- 搜索算法 : search 查找子序列、find 查找元素、find_if 查找符合要求的元素、find_first_of 查找第一个符合要求的元素 ;
- 计数算法 : count 统计元素、count_if 统计符合条件的元素 ;
- 比较算法 : equal 等于、mismatch 不匹配元素、lexicographical_compare 字典序比较 ;
- ② 可变序列算法 : 此类算法 可修改 STL 容器中的元素内容 , 如 : 插入 / 删除 / 替换 操作 ;
- 删除算法 : remove 删除元素、remove_if 条件删除元素、remove_copy ;
- 修改算法 : for_each 遍历修改、transform 变换 ;
- 排序算法 : sort 排序、stable_sort 稳定排序、partial_sort 部分排序 ;
- ③ 排序算法 : 对 STL 容器中的元素 进行 的 排序算法 / 合并算法 / 二分查找算法 以及 有序序列的集合容器 上的 算法 ;
- ④ 数值算法 : 对 STL 容器中的元素内容进行 数值计算 ;