函数原型编辑
template < class InputIterator,
class Predicate > typename iterator_traits: :difference_type count_if(InputIterator _First, InputIterator _Last, Predicate _Pred);
输入参数编辑
_First 输入迭代器,指向将被搜索的区间第一个元素的位置.
_Last 输入迭代器,指向将被搜索的区间最后一个元素后面的.
_Pred 用户自定义的 predicate function object ,定义了元素被计数需满足的条件.
predicate 只带一个参数,返回 true 或 false.
返回值编辑
满足条件的元素的数量.
复杂性编辑
完全由 last - first 比较 / 应用程序决定
示例代码编辑
实例一
#include < vector > #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 > 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 个
来源: http://lib.csdn.net/article/cplusplus/36002