第十章 定制操作

1,向算法传递函数

①首先我们先来了解一下什么是谓词,谓词分为一元谓词与二元谓词,几元就代表接受几个参数,谓词是一个表达式,他的返回结果是一个能够作为条件的值。

我们先来举一个书上面的例子:

//比较函数,用来按照长度排序单词
bool isshorter(const string &s1,const string &s2)
{return s1.size()<s2.size();}
//按照长度由短到长排序word
sort(word.begin(),word.end(),isshorter);

我们可以看到上面是一个比较大小的函数,而sort算法接受三个参数,第三个参数就是一个二元谓词(因为这个表达式有两个参数),它表示将word里面的元素按照第三个参数所起的作用来进行运算。需要注意的是,容器里面元素的类型必须能转换为谓词的参数类型。

②排序算法

如果我们希望将Word按照大小重排的同时,还希望具有相同长度的元素按照字典序排列,我们用stable_sort算法

stable_sort(word.begin(),word.end(),isshorter);

这条语句既能够生出stable_sort算法的作用又能生出isshorter这条表达式的作用。

③find_if算法来查找第一个具有特定大小的元素,它接受一对迭代器,表示一个范围。但与find不同的是find_if第三个参数是一个谓词,find_if算法对输入序列中的每个元素调用给定的这个谓词。它返回第一个使谓词返回非0值得元素,如果不存在这样的元素,则返回尾迭代器。

④介绍lambda

一个lambda具有一个返回类型,一个参数列表和一个函数体,它是一个表达式,格式如下:

【捕获列表】(参数列表)返回类型{函数体};与普通函数不同的得是lambda必须使用尾置函数返回

我们可以举一个例子来加深印象

auto f=[] {return 42;}

cout<<f()<<endl;//打印42

我们编写一个与isshorter相同功能的lambda

[](const string &a,const string &b){return a.size()>b.size();}

我们同样来实现②中的功能:


stable_sort(word.begin(),word.end(),[](const string &a,const string &b){return a.size()>b.size();})
我们可以看出来第三个参数就是lambda表达式,它不需要像②中那样再重新再外面重写一个isshorter函数。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值