14.8 调用操作符和函数对象
struct absInt{
int operator() (int val){
return val<0 -val:val;
}
};
int i = 100;
absInt absObj;
cout<
定义了调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。
14.8.1 将函数对象用于标准库算法
函数对象经常用作通用算法的实参
1. 函数对象可以比函数更灵活
class GT_cls
{
public:
GT_cls(size_t val=0):bound(val){}
bool operator()(const string &s)
{
return s.size()>=bound;
}
private:
string::size_type bound;
};
2. 使用GT_cls函数对象
cout<
标准库还定义了一组函数适配器,使我们能够特化或者扩展标准库所定义的以及自定义的函数对象类。这些标准库函数对象类型是在functional头文件中定义的。
1.每个类表示一个给定操作符
有两个一元函数对象(unary function-object)类:一元减(negate
2. 表示操作数类型的模板类型
plus
cout<
vector
sort(vec.begin(),vec.end(),greater
第三个实参用于传递比较元素的谓词函数。
14.8.3 函数对象的函数适配器
标准库提供ingke一组函数适配器(function adapter),用于特化和扩展一元和二元函数的对象。函数适配器分为如下两类:
(1)绑定器(binder),是一种函数适配器,它通过将一个操作数绑定到给定值而将二元函数对象转换为一元函数对象。
(2)求反器(negator),是一种函数适配器,它将谓词函数对象的真值求反。
标准库定义了两个绑定器适配器:bind1st和bind2nd。bind1st将给定值绑定到二元函数对象的第一个实参,bind2nd将给定值绑定到二元函数对象的第二个实参。
greater
cout<
cout<
摘自 xufei96的专栏