仿函数

一、仿函数的简介

1、什么是仿函数

其实就是一个对象,这不过这个对象重载了operator( ),可以像函数一样使用它

2、仿函数出现的意义

要想然一个“操作”作为算法的参数,唯一的办法就是给这个操作设计为一个函数,然后将函数指针作为算法的一个参数;
或者为这个操作设计出一个仿函数,然后通过仿函数产生一个对象,然后将这个对象作为算法的一个操作

3、为什么有了函数指针还需要仿函数?

因为这样可以于STL的其他组件相结合(如配接器相结合),为了可以与c++的模版,满足c++的封装的思想,可以具体的实现屏蔽,这其实是一种哲学上的思想
(函数和对象的不同,对象里面可以保存数据,而函数只能实现具体的方法)

4、仿函数的使用方法

(1)先用仿函数产生对象,然后这个对象再去调用operator()
(2)也可以产生无名的临时对象来履行函数的功能
仿函数的第二种用法不常见,但是确实仿函数的 主流用法

5、仿函数按功能进行划分:

(1)算术运算符
(2)关系运算符
(3)逻辑运算符

5、为什么可以实现仿函数

仿函数得一实现主要是由于STL有配接器功能,实现仿函数的配接器

6、STL中的仿函数

STL中的仿函数只有一元和二元的,没有三元的,并且 仿函数是没有任何的成员变量和成员函数的

7、仿函数也有内置型别:

第一个参数型别、第二个参数型别以及返回值型别
template<class Arg1,class Arg2.class Result>
struct Compare
{
	typedef Arg1 FirstArgumentType;
	typedef Arg2 SecondArgumentType;
	typedef Result ResultType;
};

这样用户变可以取得该仿函数的各种相应的型别

二、算术类的仿函数

.+ - * / % negate
貌似operator+是不加&的,因为是返回一个临时变量的值、
template<class T>
struct Plus
{
	T operator(const T& x, const T& y)
	{
		return x + y;
	}
};

三、关系运算类的仿函数
template<class T>
struct Compare
{
	bool operator( ) (const T& x, const T& y)
	{
		return x < y;
	}
};

四、逻辑类的仿函数
逻辑与,逻辑或,逻辑非
template<class T>
struct And
{
	bool operator()(const T& x, const T& y)
	{
		return x&&y;
	}
};
五、实现选择的功能
哈希表的哈希函数就用到了这个功能,通过对于仿函数的特化实现这一功能
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值