С++ для начинающих

Алгоритм 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";

}



Содержание раздела