STL仿函数

仿函数

一.仿函数概论

仿函数,现在又叫函数对象,从字面意思来说,就是模仿的函数或者有函数功能的对象。

为什么需要仿函数呢,从前面各种算法也可以看出来时常需要自行传递函数,按理来说其实函数指针也够用了,但是函数指针不够抽象,也不能和配接器搭配,所以使用仿函数。

仿函数的实现是创建一个类,类中有重载()的函数,使用的时候是先创建一个对象,然后用这个对象就可以作为函数使用了(或者用()创建一个临时对象当作函数也行)。

STL的仿函数可以按操作数分的话可分为一元、二元仿函数,若按功能分的话可分为算法运算,关系运算,逻辑运算,STL中也有自己内建的一些仿函数,要使用必须包含头文件,接下来主要就是介绍这些内建的仿函数。

二.可配接(adaptable)的关键

仿函数应该有能力被函数配接器配接,为了拥有这种能力,仿函数内应该像迭代器一样有一些型别,这些型别可以被配接器取出,定义型别也比较简单,直接用typedef就行。同时,STL中还有两个class,分别代表一元仿函数和二元仿函数,里面什么都没有,只有类别,所以我们的仿函数可以按需继承其中一个class,便自动拥有了其中的类别。接下来介绍这两个class。

unary_function

用于呈现一元仿函数的参数型别和返回值型别。每个一元仿函数继承这个类别,然后配接器就可以取出相应的型别。

binary_function

用于呈现二元仿函数的参数型别和返回值型别。每个二元仿函数继承这个类别,然后配接器可以利用这个修改接口。

三.算术类仿函数

STL中内建的算术类仿函数支持加法,减法,乘法,除法,模数,否定。

同时STL中还定义两个证同元素的函数,所谓证同元素,是指与该元素运算会得到本身,明显,加法的证同元素是0,乘法的证同元素是1,STL中定义了返回这两个证同元素的函数(虽然不是规范)。

四.关系运算类仿函数

STL中内建的关系类仿函数支持等于,不等于,大于,大于等于,小于,小于等于,定义和用法比较简单。

五.逻辑运算类仿函数

STL中内建的逻辑运算类仿函数支持And,Or,Not三种运算。

六.证同(identity),选择(select),投射(project)

这一节介绍的仿函数只是有选择的将参数原封不动的传回去,这样是为了提高抽象性,得到相应的型别。

identit(证同)

将传入的参数原本传回去,使用于set中,因为set实值即键值。

select1st(选择第一元素)

接收一个pair,返回其第一元素(的型别),使用于map中,因为map第一元素为键值。

select2nd(选择第二元素)

如题。

project1st(传回第一参数)

主要这个和选择的区别,选择是接收一个参数,返回参数的某个元素,而这个是接收两个参数,返回某个参数。

project2nd(传回第二参数)

如题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值