首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 语言基础 >> 正文
Common Function Objects & Function Adapters
作者:Jarod    文章来源:Jarod 的半个程序员    更新时间:2007-8-20 11:50:09
函数对象是一个好用的东西(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之中。

相关文章:
没有相关文章
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号