
Algorithm
Count the number of elements in a container that satisfy a given condition.
#include <algorithm>
template <class InputIterator, class T, class Size>
void count(InputIterator first, InputIterator last,
const T& value, Size& n);
template <class InputIterator, class Predicate, class Size>
void count_if(InputIterator first, InputIterator last,
Predicate pred, Size& n);
The count algorithm compares value to elements in the sequence defined by iterators first and last, and increments a counting value n each time it finds a match. i.e., count adds to n the number of iterators i in the range [first, last) for which the following condition holds:
*i == value
The count_if algorithm lets you specify a predicate, and increments n each time an element in the sequence satisfies the predicate. That is, count_if adds to n the number of iterators i in the range [first, last) for which the following condition holds:
pred(*i) == true.
Both count and count_if perform exactly last-first applications of the corresponding predicate.
//
// count.cpp
//
#include <vector>
#include <algorithm>
#include <iostream.h>
int main()
{
int sequence[10] = {1,2,3,4,5,5,7,8,9,10};
int i=0,j=0,k=0;
//
// Set up a vector
//
vector<int> v(sequence,sequence + 10);
count(v.begin(),v.end(),5,i); // Count fives
count(v.begin(),v.end(),6,j); // Count sixes
//
// Count all less than 8
// I=2, j=0
//
count_if(v.begin(),v.end(),bind2nd(less<int>(),8),k);
// k = 7
cout << i << " " << j << " " << k << endl;
return 0;
}
Output : 2 0 7
If your compiler does not support default template parameters then you need to always supply the Allocator template argument. For instance, you'll have to write:
vector <int, allocator>
instead of:
vector <int>