C++学习27:STL算法形式及示例

不同于STL其他部件,其余五个都是类模板,但算法是个函数模板。
关于类模板和函数模板的资料,可见:C++学习13:模板的类型和特化

1 引言

由于算法是函数模板,故对于算法而言,每个位置应该是什么类型的参数,一个是有默认值的。如sort:可以是两个迭代器类型的参数,也可以是三个参数的,即增加了比较方式的第三参数。
在这里插入图片描述
前面已经知道,算法的功能是“提问”来处理容器的操作,迭代器的功能是完成对算法提问的“回答”。所以迭代器的种类对算法的效率有很大的影响,算法也对迭代器的种类有所暗示,这部分内容见上一节

2 形式

1、必须在std命名空间中
2、前两个参数必须是两个指针(迭代器)
在这里插入图片描述
3、函数和仿函数都可以规定算法的操作。假设myfunc是个函数,myobj重载了小括号,是一个仿函数,他们可以作为第三、第四或其他参数来对算法的操作进行限制。有关仿函数Functor的内容见下一节

3 示例

3.1 accumulate

功能:将元素累加到init上。从三个参数的版本中可以清晰看出,而下面四个参数的版本可以用函数或仿函数规定一个accumulate的方法。
在这里插入图片描述

3.2 for_each

功能:对一段范围的每一个值做某件事情。
在这里插入图片描述

3.3 replace

功能:取代,顾名思义,遍历迭代器位置,若值与要取代的值相同,就用新值代替。
命名方式:_if、_copy。replace_if表示如果满足条件pred时替换;replace_copy表示将旧值放至新的区间。
在这里插入图片描述

3.4 count

功能计算在一个范围里面符合条件的有多少。
命名方式同上,且有成员函数版本和全局函数版本(左边)。当容器有成员函数版本时,应该用成员函数版本。和count同类的有find和sort等。
在这里插入图片描述

3.5 find

功能:循序式的搜寻。
在这里插入图片描述

3.6 sort

功能:排序(由小到大)。若要从大到小,可见下图1817行rbegin,rend操作。
在这里插入图片描述
对于rbegin,rend,可用下图帮助理解:
在这里插入图片描述
关于迭代器适配器reverse_iterator,后面会有讲解。

3.7 binary_search

功能:在排序的前提下进行二分搜寻。
在这里插入图片描述
其中,lower_bound和upper_bound表示插入的位置,lower_bound表示能安插的同等的最小的位置,upper_bound表示最大的位置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值