【C++】STL 算法概念和分类 ( STL 算法头文件 | STL 算法思想 - 数据与算法分离 | STL 算法 迭代器 | STL 算法 操作对象 | STL 算法分类 )

250 篇文章 150 订阅





一、STL 算法概念



1、STL 算法头文件


标准模板库 STL 算法 都定义在 <algorithm> , <numeric> <functional> 三个头文件中 ;

使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ;

#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 容器中的元素内容进行 数值计算 ;
  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值