函数对象用于标准库

1、什么是函数对象?

   定义了调用操作符的类,其对象常成为函数对象,即他们是行为类型函数的对象。如下例子所示:

 1 struct absInt
 2 {
 3     int operator() (int val)
 4     {
 5         return val < 0 ? - val:val;
 6     }
 7 };
 8 
 9 int _tmain( int argc, char** argv )
10 {
11     int i = -42;
12     absInt absObj;
13     absObj(i);
14 
15     return 0;
16 }

2、函数对象用作算法的实参
   举下面一个例子:分析一组故事中的单词,计算有多少单词长度在6字符以上。该解决方案的一个部分包括定义一个函数已确定给的单词长度在6字符以上。

1 bool GT6(const string &s)
2 {
3     return s.size >= 6;
4 }

    使用GT6作为实参传递给count_if,计算使GT6返回true的单词的数目:

1 vector<string> words;
2 vector<string>::size_type wc = count_if(words.begin(),words.end(),GT6);

   我们发现将6这个数字固定在GT6函数定义中。count_if算法运行只用一个形参且返回bool的函数。理想情况下,我们应该传递我们想要的长度进行测试。通过函数对象方式,我们可以使用同意代码对不同长度的字符串进行计数。定义如下所示:

 1 class GT_cls
 2 {
 3 public:
 4     GT_cls(size_t val = 0):bound(val) {}
 5     bool operator() (const string &s)
 6     {
 7         return s.size >= bound;
 8     }
 9 
10 private:
11     size_t bound;
12 };

   我们可以向下面这样使用:

1 vector<string> words;
2 vector<string>::size_type wc = count_if(words.begin(),words.end(),GT_cls(6));

    这样我们就可随便计算有多少单词长度在字符以上了。

转载于:https://www.cnblogs.com/hwm520hlf1314/p/3455973.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值