函数对象 与 count_if()结合使用 例子

原创 2007年10月08日 10:20:00

例程一、

/*
|| Using a function object to help count things
*/
#include <string>
#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
const string ToothbrushCode("0003");

class IsAToothbrush {
public: 
 bool operator() ( string& SalesRecord ) {
  return SalesRecord.substr(0,4)==ToothbrushCode;
 }    
};

int main (void) {
 list<string> SalesRecords;
#
 SalesRecords.push_back("0001 Soap");
 SalesRecords.push_back("0002 Shampoo");
 SalesRecords.push_back("0003 Toothbrush");
 SalesRecords.push_back("0004 Toothpaste");
 SalesRecords.push_back("0003 Toothbrush");
#
 int NumberOfToothbrushes(0); 
 NumberOfToothbrushes=count_if (SalesRecords.begin(), SalesRecords.end(),
  IsAToothbrush() ); //第三个参数IsAToothbrush(),它是由它的构造函数临时构造的一个对象
#
 cout << "There were "
  << NumberOfToothbrushes
  << " toothbrushes sold" << endl;
}

例程二、(与前面的例程一功能一致,改用函数来实现)

#include <string>
#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
const string ToothbrushCode("0003");


bool IsAToothbrush(string x)
{
 return x.substr(0,4)==ToothbrushCode;
}
int main (void) {
 list<string> SalesRecords;
#
 SalesRecords.push_back("0001 Soap");
 SalesRecords.push_back("0002 Shampoo");
 SalesRecords.push_back("0003 Toothbrush");
 SalesRecords.push_back("0004 Toothpaste");
 SalesRecords.push_back("0003 Toothbrush");
#
 int NumberOfToothbrushes(0); 
 NumberOfToothbrushes=count_if (SalesRecords.begin(), SalesRecords.end(),
  IsAToothbrush );
#
 cout << "There were "
  << NumberOfToothbrushes
  << " toothbrushes sold" << endl;
}

例程三、(更加复杂的函数对象,传递的信息更多,使用更灵活)
*//*
|| Using a more complex function object
*/
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
using namespace std;
#
class IsAToothbrush {
public:
 IsAToothbrush(string& InToothbrushCode) :
      ToothbrushCode(InToothbrushCode) {}
   bool operator() (string& SalesRecord) {
    return SalesRecord.substr(0,4)==ToothbrushCode;
   }      
private:
 string ToothbrushCode;       
};
#
int main (void) {
 list<string> SalesRecords;
#
 SalesRecords.push_back("0001 Soap");
 SalesRecords.push_back("0002 Shampoo");
 SalesRecords.push_back("0003 Toothbrush");
 SalesRecords.push_back("0004 Toothpaste");
 SalesRecords.push_back("0003 Toothbrush");
#
 string VariableToothbrushCode("0003");
#
 int NumberOfToothbrushes(0); 
 
 NumberOfToothbrushes=count_if (SalesRecords.begin(), SalesRecords.end(),
  IsAToothbrush(VariableToothbrushCode));
 cout << "There were  "
  << NumberOfToothbrushes
  << " toothbrushes matching code "
  << VariableToothbrushCode
  << " sold"
  << endl;
}

 

这个例子演示了如何向函数对象传递信息。你可以定义任意你想要的构造函数,你可以再函数对象中做任何你 想做的处理,都可以合法编译通过。
你可以看到函数对象真的扩展了基本记数算法

使用适配器模式设计RMI方式的网络应用程序

 使用适配器模式设计RMI方式的网络应用程序为网络应用编写本地Java对象指南 简介:    使用Java的RMI方式编写基于网络的应用程序是非常简单的。然而,使用不是基于网络的类,而且还把它复杂化来...
  • wearebug
  • wearebug
  • 2002-04-01 09:31:00
  • 1126

【STL】标准库中count与count_if函数说明与例子

count_if函数原型如下: template inline typename iterator_traits::difference_type count_if(_InI...
  • huang_xw
  • huang_xw
  • 2012-09-02 09:28:52
  • 9162

STL_算法_元素计数(count、count_if)

C++ Primer 学习中。。。   简单记录下我的学习过程 (代码为主)   count 、 count_if     #include #include #include ...
  • u010579068
  • u010579068
  • 2015-12-23 17:04:10
  • 2029

简单的程序诠释C++ STL算法系列之七:count_if

C++STL的非变易算法(Non-mutating algorithms)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。      count_if算...
  • jerryjbiao
  • jerryjbiao
  • 2011-10-09 20:58:07
  • 7500

count_if函数详解

count_if :返回区间中满足指定条件的元素数目。template   typename iterator_traits::difference_type count_if(      Input...
  • jinjingwen
  • jinjingwen
  • 2011-03-08 16:25:00
  • 6510

C++ count和count_if的使用

1)count(first,last,value):first是容器的首迭代器,last是容器的末迭代器,value是询问的元素,整个函数返回int型。count函数的功能是:统计容器中等于value...
  • sinat_24310873
  • sinat_24310873
  • 2016-11-27 13:56:17
  • 3163

C++标准库---count()&count_if()

元素计数 count(InputIterator beg,InputIterator end,const T& value) count_if(InputIterator beg,InputIte...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014-12-17 16:08:58
  • 647

C++中函数对象的使用

函数对象的使用 利用C++标准模板库的算法可以为我们减轻许多负担,但这些算法大都需要函数或函数对象作为参数,比如用于排序的sort算法,它的接口定义如下:template void sort (Ran...
  • ZQGet
  • ZQGet
  • 2004-10-27 22:25:00
  • 3041

函数对象与 for_each结合使用

简单使用for_each //程序1 #include #include #include #include using namespace std; set Setstr;...
  • wangjianfeiwuhao
  • wangjianfeiwuhao
  • 2012-05-10 11:06:03
  • 208

C++函数对象count_if用法(转)

标准库里的count_if可以统计容器中满足特定条件的元素的个数。例如要统计一个整数vector——ivec中正数的个数,可以先写一个返回类型为bool,含有一个int参数的条件函数: bool...
  • WangPegasus
  • WangPegasus
  • 2013-06-19 19:27:16
  • 1321
收藏助手
不良信息举报
您举报文章:函数对象 与 count_if()结合使用 例子
举报原因:
原因补充:

(最多只允许输入30个字)