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之中。

 

你可能感兴趣的:(算法,vector,struct,object,function,less)