利用STL通用算法统计vector向量中某个元素出现的次数:count()算法统计等于某个值的对象的个数。
#include "stdafx.h"
#include
#include
#include
using namespace std;
int_tmain(int argc, _TCHAR* argv[])
{
vector<int> scores;
scores.push_back(100);
scores.push_back(80);
scores.push_back(45);
scores.push_back(75);
scores.push_back(99);
scores.push_back(100);
int num = 0;
num= count(scores.begin(),scores.end(),100);//统计100出现的次数
cout<<"times: "< return 0; } 函数对象是一个至少带有一个operator()方法的类。 函数对象被约定为STL算法调用operator时返回true或false,它们根据这个来判定这个函数。 count_if()函数通过传递一个函数对象来做出比count()统计函数更加复杂的评估以确定一个对象是否应该被计数,即count_if()函数的功能等同于count()函数和一些条件语句。 例子:1 #include "stdafx.h" #include #include #include #include using namespace std; conststring TC("0003"); classIsTB { public: IsTB(){cout<<"执行默认构造函数"< bool operator()(string& saleRecord) { return (saleRecord.substr(0,4) == TC); } }; int_tmain(int argc, _TCHAR* argv[]) { vector saleRecordVec.push_back("0001 Soap"); saleRecordVec.push_back("0002 Shampoo"); saleRecordVec.push_back("0003 ToothBrush"); saleRecordVec.push_back("0004 Toothpaste"); saleRecordVec.push_back("0003 ToothBrush"); int num = 0; num= count_if(saleRecordVec.begin(),saleRecordVec.end(),IsTB()); cout<<"Times: "< IsTBobjIsTB; //利用已有的对象 num= count_if(saleRecordVec.begin(),saleRecordVec.end(),objIsTB); cout<<"Times: "< return 0; } count_if()函数的第三个参数是类对象。 执行结果: 如果需要给函数对象传递更多的信息,那么可以通过定义一个非缺省的构造函数来初始化所需要的信息。 例子:2 #include "stdafx.h" #include #include #include #include using namespace std; classIsTB { public: IsTB(string& str){ m_str =str;} //通过构造函数传递信息 bool operator()(string&saleRecord) { return (saleRecord.substr(0,4) == m_str); } private: stringm_str; }; int_tmain(int argc, _TCHAR* argv[]) { vector saleRecordVec.push_back("0001 Soap"); saleRecordVec.push_back("0002 Shampoo"); saleRecordVec.push_back("0003 ToothBrush"); saleRecordVec.push_back("0004 Toothpaste"); saleRecordVec.push_back("0003 ToothBrush"); int num = 0; stringstr("0003"); num= count_if(saleRecordVec.begin(),saleRecordVec.end(),IsTB(str)); cout<<"Times: "< IsTBobjIsTB(str); //利用已有的对象 num= count_if(saleRecordVec.begin(),saleRecordVec.end(),objIsTB); cout<<"Times: "< return 0; } 2 count_if():利用函数对象统计满足条件对象的个数