《C++STL标准程序库开发指南》第十三章,仿函数(未完待续,不是很懂)【整本书的精华所在】

仿函数(函数对象),仿函数也称为函数数符。

仿函数的英文:FunctionObjects,即函数对象。
仿函数是将函数作为参数传递的使用方式,例如:逻辑谓词,算术运算,抽取信息等。

仿函数的概述

仿函数是定义了一个operator()的对象。仿函数可以视为一般函数,仿函数在其成员函数operator()中实现的。
3个优点:
	1 仿函数比一般函数更灵巧,主要是因为仿函数拥有状态(state).
	  对于仿函数,可以拥有两个状态不同的实体。通常的普通函数是不能实现该目的的。
	2 每个仿函数都有其型别。因此仿函数的型别可以作为模板参数,实现指定某种行为的目的。
	  容器型别不会和具体仿函数有关,而仅仅是该型别的仿函数均可以使用。
	3 仿函数要比函数指针的执行速度快得多。在C++规范中,函数调用通常使用指针,
	  当需要调用函数时,只需要函数的地址(名称)即可。
	  地址调用的缺陷效率非常低,为提高效率需要使用仿函数的形式。
	  定义的仿函数被调用时,是使用运算符operator()的。
	  通过对运算符自定义,能显著提高效率。

仿函数均是以类似函数的形式被调用的。仿函数均包含成员函数operator(),这是仿函数的共同点。
仿函数的基类:
	template<class _A,class _R>
	struct unary_function
	{
		typedef _A Argument_Type;
		typedef _R Result_Type;
	};template<class Arg1,class Arg2,class Result>
	struct binary_function
	{
		typedef Arg1 first_argument_type;
		typedef Arg2 second_argument_type;
		typedef Result result_type;
	};

学习仿函数,了解3个概念:生成器,一元函数,二元函数
1 生成器,是不用参数就可以调用的仿函数(即无参数仿函数)
2 一元函数,是用一个参数就可以调用的仿函数
3 二元函数,是用两个参数才可以调用的仿函数

对于for_each(),其调用的仿函数就应该是一元函数

仿函数4种使用形式
					1 作为排序规则
					2 拥有内部状态
					3 算法for_each()的返回值
					4 作为判断式
					
发布了30 篇原创文章 · 获赞 5 · 访问量 2215

猜你喜欢

转载自blog.csdn.net/weixin_44408476/article/details/104924828