函数符

转载 2012年03月25日 11:00:34

来自http://hi.baidu.com/qinpanke/blog/item/728d7888dfcd18be0f24448e.html

非常感谢 “墙角里的光线”转载的这篇文章

 

什么是函数符?
函数对象也叫做函数符(functor)。
函数符是可以以函数方式与()结合使用的任意对象。这包括函数名,指向函数的指针和重载了()操作符的类对象(即定义了函数operator()()的 类)。
例如:
class Linear
{
private:
double a;
public:
Linear(double b):a(b){}
bool operator()(double b) {return a > b;}
}

Linear f1(3.0);
bool isbig = f1(4.0);//实际上调用的是f1.operator()(4.0)

ok,现在让我们回想一下for_each函数
for_each(books.begin(), books.end(), ShowReview);
第三个参数是常规函数,那如何让for_each即可以接受常规函数,又可以接受上面这种类对象。
模板可以满足要求:
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function f);
这样对于普通函数ShowReview原型如下:
void ShowReview(const Review&);
标识符ShowReview的类型将为void(*)(const Review&),这也是赋给模板参数Function的类型。对于不同的函数调用,Function参数可以表示具有重载的()操作符的类类 型。最终,for_each()代码将具有一个使用f()的表达式,在ShowReview()范例中,f是指向函数的指针,而f()调用该函数。如果最 后的for_each()参数是一个对象,则f()将是调用其重载的()操作符的对象。

2.函数符相关的概念
(1)生成器(generator)是不用参数就可以调用的函数符
(2)一元函数(unary function)是用一个参数可以调用的函数符。
(3)二元函数(binary function)。。。。
(4)返回bool值的一元函数是断言(predicate)
(5)返回bool值的二元函数是二元断言(binary predicate)

3.系统预定义函数符

操作符

相应的函数符

+

plus

-

minus

*

multiplies

/

divides

%

modulus

-

negate

==

equal_to

!=

not_equal_to

>

greater

<

less

>=

greater_equal

<=

less_equal

&&

logical_and

||

logical_or

!

logical_not

用法举例:

sort(v.begin(), v.end(), greater<int>());

4.函数适配器
介绍两个函数:
bind1st()和bind2st();
举例:
transform(v.begin(), v.end(), out.begin(), bind1st(multiplies<double>(), 2.5) );
意思就是把v中的所有元素乘以2.5输出到out中。


bind1st()的作用就是把二元函数,第一个参数实例化,这样这个二元函数就可以用在需要一元函数的地方.

同样bind2st()就是把第二个参数实例化。

相关文章推荐

C++复制构造函数和赋值符的区别

C++复制构造函数和赋值符的区别 标签: c++constructorclassfunctionc 2011-08-07 15:15 9301人阅读 评论(5) 收藏 举报 ...

详解C语言printf函数以及%占位符知识

功能: C语言中产生格式化输出的函数(定义在stdio.h系统头文件中),向终端输出 (显示屏等。。。); 定义: int printf(const char *format,[argument]...

用汇编的眼光看C++(之类静态变量、静态函数), (之算术符重载)

用汇编的眼光看C++(之类静态变量、静态函数) 【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     看过设计模式的朋友...

C语言中scanf函数输入回车符的问题

在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时...

【C语言】getchar函数的控制台输入原理,回车符的处理

getchar函数的功能是从输入流读取一个字符,这是我们要明确的就是: 我们在控制台需要输入至少两个字符才能保证这个函数的执行: 例如: 源程序: char ch; ch = getchar...

实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等

分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。 看到的这个题目,首先我们可以分析人们是如何做十进制的加法的,比如...

printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出方式?

“任何你真正想得到的一定是值得坚持的!”
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数符
举报原因:
原因补充:

(最多只允许输入30个字)