Common Function Objects & Function Adapters

函数对象是一个好用的东西(Function Object),它不仅具有自己的状态(可以当作算法参数), 还在一般情况下可以内联获得更好的性能。当然,有些小的函数为获得较好的性能,是要经常被改写为函数对象的,如
  
  
vector < int >  v( 10 );
// ....
sort(v, IntLess);
 
  struct IntLess {
     bool operator ()(const int & a, const int & b) const { return a<b }
  };
如果这种情况多了,很麻烦。其实STL里面已经为我们定义好了一些常用的函数:
negate<type>()  - param  
plus<type>()  param1 + param2 
minus<type>()  param 1 - param2 
multiplies<type>()[4]  param1 * param2 
divides<type>()  param1 / param2 
modulus <type>()  param1 % param2 
equal_to<type>()  param1 == param2 
not_equal_to<type>()  param1 ! = param2 
less<type>()  param1 < param2 
greater<type>()  param1 > param2 
less_equal<type>()  param1 <= param2 
greater_equal<type>()  param1 >= param2 
logical_not<type>()  ! param 
logical_and<type>()  param1 && param2 
logical_or<type> ()  param1 | | param2 
 
除此之外,还有两个非常好用的函数适配器(Function Adapter)
 
   
   
bind1st (op,value) op(value,param)
bind2nd (op, value) op(param,value)
not 1(op) !op(param)
not2(op) !op(param1 ,param2)
其使用方法也十分简单,就不多介绍了。
find_if (coll.begin(),coll.end(),        //range
             bind2nd (greater<int>(),42))    //criterion

其实还有更简单的写法,存在于boost之中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值