C++中泛型算法详解6:根据结构速记所有标准库的泛型算法

本节与迭代器的类型密切相关。

0. 约定

  • beg和end表示元素范围的迭代器,几乎所有的算法都有一对由beg和end表示的序列进行操作。
  • beg2表示第二个输入序列开始位置的迭代器。end2表示第二个序列的末尾位置。如果没有end2,算法假定beg2表示的序列与第一个序列表示的一样大。
  • 两个序列类型不必匹配,但是必须保证两个序列的元素都可以执行特定操作或者调用给定的可调用对象。
  • unaryPred 和binaryPred表示一元和二元谓词,分别接受一个或者两个参数
  • unaryOp和binaryOp是可调用对象,分别使用来自输入序列的一个和两个实参来调用

1. 查找对象的算法

简单查找算法

  • 要求是输入迭代器。
    在这里插入图片描述

查找重复值的算法

  • 要求前向迭代器
    在这里插入图片描述
    返回end.

查找子序列的算法

  • find_first_of: 一个输入迭代器,一个前向迭代器
  • 之外,都是两个前向迭代器
    在这里插入图片描述

2. 其他只读算法

  • 两个输入迭代器
    在这里插入图片描述

3. 二分搜索算法

  • 随机访问迭代器的话,这类算法的性能好很多。
  • 算法要求元素有序
    在这里插入图片描述

附录:

关于二分搜索的算法实现细节:link

4. 写容器元素的算法

只写不读元素的算法

  • 输出迭代器
  • _n版本接受第二个实参,表示写入元素的目录
    在这里插入图片描述

使用输入迭代器的写算法

  • 输入范围是输入迭代器
  • 输出范围要求名为dest的输出迭代器
    在这里插入图片描述

此外还有使用前向迭代器和双向迭代器的写算法,不再赘述。有需求就去查看《C++ Primer》

5. 划分与排序算法

所有的排序和划分算法都提供了稳定和不稳定版本。

稳定算法保证相等元素的相对顺序。

划分算法

划分算法将输入范围中的元素划分为两组,一组包含满足谓词的元素,第二足包含不满足谓词的元素。

均要求双向迭代器
在这里插入图片描述排序算法

算法要求随机访问迭代器。
在这里插入图片描述

6. 通用重排操作

算法基本版本都是原址操作
提供_copy拷贝版本

使用前向迭代器的重排算法

在这里插入图片描述

使用双向迭代器的重排算法

在这里插入图片描述
使用随机访问迭代器的重排算法

在这里插入图片描述

7. 排列算法

什么是下一个或前一个排列?

在这里插入图片描述

  • 算法假定序列中的元素是唯一的。
  • 双向迭代器
    在这里插入图片描述

8. 有序序列的集合算法

在这里插入图片描述
在这里插入图片描述

9. 最大最小值

在这里插入图片描述在这里插入图片描述

10. 数值算法

  • 头文件numeric

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值