Алгоритм count_if()
template < class InputIterator, class Predicate >
iterator_traits<InputIterator>::distance_type
count_if( InputIterator first,
InputIterator last, Predicate pred );
count_if() применяет предикат pred к каждому элементу из диапазона, ограниченного парой итераторов [first,last). Алгоритм сообщает, сколько раз предикат оказался равным true.
#include <algorithm>
#include <list>
#include <iostream.h>
class Even {
public:
bool operator()( int val )
{ return val%2 ? false : true; }
};
int main()
{
int ia[] = {0,1,1,2,3,5,8,13,21,34};
list< int,allocator > ilist( ia, ia+10 );
/*
* не поддерживается в текущей реализации
*****************************************************
typedef
iterator_traits<InputIterator>::distance_type
distance_type;
distance_type ia_count, list_count;
// счетчик четных элементов: 4
ia_count = count_if( &ia[0], &ia[10], Even() );
list_count = count_if( ilist.begin(), ilist_end(),
bind2nd(less<int>(),10) );
******************************************************
*/
int ia_count = 0;
count_if( &ia[0], &ia[10], Even(), ia_count );
// печатается:
// count_if(): есть 4 четных элемент(а).
cout << "count_if(): есть "
<< ia_count << " четных элемент(а).\n";
int list_count = 0;
count_if( ilist.begin(), ilist.end(),
bind2nd(less<int>(),10), list_count );
// печатается:
// count_if(): есть 7 элемент(ов), меньших 10.
cout << "count_if(): есть "
<< list_count
<< " элемент(ов), меньших 10.\n";
}