template <class InputIterator, class Predicate> typename iterator_traits<InputIterator>::difference_type count_if ( ForwardIterator first, ForwardIterator last, Predicate pred ); | <algorithm> |
Return number of elements in range satisfying condition
Returns the number of elements in the range [first,last) for which condition pred is true.
The behavior of this function template is equivalent to:
template <class InputIterator, class Predicate> ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred ) { ptrdiff_t ret=0; while (first != last) if (pred(*first++)) ++ret; return ret; } |
Parameters
-
first, last
- Forward iterators to the initial and final positions of the sequence of elements. The range used is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. pred
- Unary predicate taking an element in the range as argument, and returning a value indicating the falsehood (with false, or a zero value) or truth ( true, or non-zero) of some condition applied to it. This can either be a pointer to a function or an object whose class overloads operator().
Return value
The number of elements in the range [first,last) for which cond applied to it returns true.The return type (iterator_traits<InputIterator>::difference_type) is a signed integral type, generally defined as the same type as ptrdiff_t.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;;
class Student{
public:
int No;
string strName;
int grade;
Student(int No,string strName,int grade):No(No),strName(strName),grade(grade){};
/*bool operator ==(int grade){
return this->grade==grade;
}*/
};
class MatchExpress{
int grade;
public:
MatchExpress(int grade):grade(grade){};
bool operator()(Student& s){
return s.grade>grade;
}
};
int main(){
vector<Student>v;
Student s1(1000,"张三",80);
Student s2(1001,"李四",85);
Student s3(1002,"王五",80);
Student s4(1003,"赵六",80);
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
int nCount;
nCount=count_if(v.begin(),v.end(),MatchExpress(80));
cout<<nCount<<endl;
}