zoukankan      html  css  js  c++  java
  • 函数对象用于标准库

    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));

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

  • 相关阅读:
    第1次作业
    第0次作业
    总结报告
    第14、15周作业
    第七周作业
    第六周作业
    第四周作业
    第四次作业
    第三次作业
    2018第二次作业
  • 原文地址:https://www.cnblogs.com/hwm520hlf1314/p/3455973.html
Copyright © 2011-2022 走看看