函数原型编辑
template<class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type count_if(
InputIterator _First,
InputIterator _Last,
Predicate _Pred
);
输入参数编辑
_First 输入迭代器,指向将被搜索的区间第一个元素的位置。
_Last 输入迭代器,指向将被搜索的区间最后一个元素后面的。
_Pred 用户自定义的 predicate function object ,定义了元素被计数需满足的条件。
predicate 只带一个参数,返回 true 或 false.
返回值编辑
满足条件的元素的数量.
复杂性编辑
完全由last - first比较/应用程序决定
示例代码编辑
实例一
#include <vector>
#include <algorithm>
#include <iostream>
bool greater10(int value)
{
return value >10;
}
int main()
{
using namespace std;
vector<int> v1;
vector<int>::iterator Iter;
v1.push_back(10);
v1.push_back(20);
v1.push_back(10);
v1.push_back(40);
v1.push_back(10);
cout << "v1 = ( ";
for (Iter = v1.begin(); Iter != v1.end(); Iter++)
cout << *Iter << " ";
cout << ")" << endl;
vector<int>::iterator::difference_type result1;
result1 = count_if(v1.begin(), v1.end(), greater10);
cout << "The number of elements in v1 greater than 10 is: "
<< result1 << "." << endl;
}
运行结果
1
2
v1 = ( 10 20 10 40 10 )
The number of elements in v1 greater than 10 is: 2.
实例二
//VC6.0下编译运行会报错
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <typename elementType>
bool IsEven(const elementType& number)
{
return ((number % 2 )==0);
}
int main()
{
vector<int> vecIntegers;
for (int nNum=-9; nNum<10;++nNum)
{
vecIntegers.push_back(nNum);
}
vector<int>::const_iterator iElementLocator;
for (iElementLocator=vecIntegers.begin();
iElementLocator != vecIntegers.end();
++iElementLocator)
{
cout << *iElementLocator << ' ';
}
cout << endl;
size_t nNumEvenElements = count_if(vecIntegers.begin(), vecIntegers.end(), IsEven<int>);
cout << "vector里有" << vecIntegers.size() << "个数,其中偶数有" << nNumEvenElements << "个" << endl << endl;
return 0;
}
运行结果
1
2
-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
vector里有19个数,其中偶数有9个