count_if
count_if
STL 样本 count_if 函数
所需的页眉
<algorithm>
原型
template<class InputIterator, class Predicate> inline size_t count_if(InputIterator first, InputIterator last, Predicate P)
注: 在原型中的类/参数名称与在头文件版本不匹配。某些已被修改,以提高可读性。
说明
count_if 算法计算中的元素范围 [first, last) 导致返回 true,谓词的数量,并返回的谓词是真正的元素数。
示例代码
//////////////////////////////////////////////////////////////////////
//
// Compile options needed: /GX
//
// count.cpp : Illustrates how to use the count_if function.
//
// Functions:
//
// count_if - Count items in a range that satisfy a predicate.
//
// begin - Returns an iterator that points to the first element in
// a sequence.
//
// end - Returns an iterator that points one past the end of a
// sequence.
//
// Written by Kalindi Sanghrajka
// of Microsoft Product Support Services,
// Software Core Developer Support.
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////
// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <vector>
using namespace std;
// Return true if string str starts with letter ''S''
int MatchFirstChar( const string& str)
{
string s("S") ;
return s == str.substr(0,1) ;
}
void main()
{
const int VECTOR_SIZE = 8 ;
// Define a template class vector of strings
typedef vector<string, allocator<string> > StringVector ;
//Define an iterator for template class vector of strings
typedef StringVector::iterator StringVectorIt ;
StringVector NamesVect(VECTOR_SIZE) ; //vector containing names
StringVectorIt start, end, it ;
int result = 0 ; // stores count of elements
// that match value.
// Initialize vector NamesVect
NamesVect[0] = "She" ;
NamesVect[1] = "Sells" ;
NamesVect[2] = "Sea" ;
NamesVect[3] = "Shells" ;
NamesVect[4] = "by" ;
NamesVect[5] = "the" ;
NamesVect[6] = "Sea" ;
NamesVect[7] = "Shore" ;
start = NamesVect.begin() ; // location of first
// element of NamesVect
end = NamesVect.end() ; // one past the location
// last element of NamesVect
// print content of NamesVect
cout << "NamesVect { " ;
for(it = start; it != end; it++)
cout << *it << " " ;
cout << " }\" << endl ;
// Count the number of elements in the range [first, last +1)
// that start with letter ''S''
result = count_if(start, end, MatchFirstChar) ;
// print the count of elements that start with letter ''S''
cout << "Number of elements that start with letter \\"S\\" = "
<< result << endl ;
}
输出:
NamesVect {She 销售海外壳通过海陆}
以字母"S"开头的元素数 = 6