STL的function object concepts

1、几乎任何算法都能以 [ 将其行为的某一部分抽象为function object ]的方式来加以一般化;

2、Function objects与adaptable function objects的区别:后者需要定义引用类型argument_type等,一般继承自基类unary_function和binary_function;

3、任何function object concept 的基本条件只是:如果f是个function object,我们可以将operator( )施行于 f 身上。

4、算法中固定了Function objects的输入变量及其个数,其一般都是指相关迭代器指针;
而Function objects adapter的一个作用也是修改adaptable function objects的输出变量个数operator()( );

struct last_name_is
{
string value;
last_name_is(const string& val) : value(val) { } (构造函数初始化;)
bool operator()(const Person& x) const { (const Person& x 是对象的输入,被调用时,由调用的函数内部输入参数,一般是迭代器对象值)
return x.last_name == value;
}
};
find_if(first, last, last_name_is("Smith"))


class类Function object
0、
template<class Number> struct even
{
bool operator( ) (Number x) const { return (x & 1)==0;)}
};
这里的(Number x) 是类even的输出;
一般还定义一个初始化函数constructor;
1、find_if(f, l, even<int>( ));
even<int>是个class,所以我们必须将该种class object传给find_if。所以我们必须调用其constructor。
2、因为operator()被声明为inline,所以使用even时,不需任何函数调用;
3、find_if(f, l, even<int>( ) )
function call操作符operator()可以被重载,所以只要某个型别具有妥善定义的operator(),你便可以将该对象传给算法find_if当做引数。

转载于:https://www.cnblogs.com/wllwqdeai/p/10401827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值