STL & 仿函数 | 仿函数适配器bind1st / bind2nd / not1 / not2


仿函数(functor) 是什么

    说的通俗点就是:一个类重写了()运算符,该class创建出来的对象,这个对象就是函数对象(它是一个对象,但是像一个函数,因此叫做仿函数)

在这里插入图片描述


仿函数的 功能

    仿函数是为alogrithm服务的,用于为alogrithm指定大小比较的准则,常见的算法包括:for_each、sort、count_if、find_if、min_element、remove_if

alogrithm分类

    以上alogrithm根据能接收形参的个数是1个还是2个,划分为2类,如下图:

alogrithm接收两个形参的APIalogrithm接收一个形参的API
sortfor_each、count、count_if 、remove_if

functor分类

    同样,STL自带的仿函数 根据能接收形参的个数是1个还是2个也分为2类,即:一元仿函数、二元仿函数。
在这里插入图片描述

自定义仿函数对象

    仿函数常被用于定义比较大小的规则,通常情况下,创建仿函数类 & 重写 bool operator(…,…)函数 → → → 参考文章《 STL & 自定义比较器 》的 ② 、④、⑤ 。


仿函数适配器 & Binders

在这里插入图片描述
[1] bind1st、bind2nd 将一个二元函数对象functor(param1,param2)的某个参数 绑定 一个value,从而转换成一元函数对象

  • bind1st (二元仿函数对象functor(param1,param2), value)  <==> 一元仿函数对象functor(value,param2)
  • bind2nd(二元仿函数对象functor(param1,param2), value)  <==> 一元仿函数对象functor(param1,value)

[代码案例1]
count_if(v.begin(), v.end(), bind1st(less<int>(), 4) )
    1. 使用bind1st将二元函数对象绑定为一元函数对象,即:bind1st(less<int>(), 4)) ←→ less<int>(4, param)
    2. count_if 依次取出每个元素,放入param中

[代码案例2]
count_if(v.begin(), v.end(), bind2nd(less<int>(), 4) )
    1. 使用bind2nd将二元函数对象绑定为一元函数对象,即:bind1st(less<int>(), 4)) ←→ less<int>(param, 4)
    2. count_if 依次取出每个元素,放入param中

[2] not1( 一元函数对象functor(param) )
    count_if(v.begin(), v.end(), not1( bind2nd (less<int>(), 3)) );

[3] not2( 二元函数对象functor(param1, param2) )


C++11 & std::bind | std::function

    bind1st、bind2nd在实际应用中存在缺陷,为了更加具有普适性,C++11提出了 std::bind 和 占位符 ,用于绑定 多个参数 的函数对象。 参考链接 →→→ C++11 & std::bind | std::function

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值