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

       

Алгоритм generate_n()


template< class OutputIterator,

          class Size, class Generator >

void

generate_n( OutputIterator first, Size n, Generator gen );

generate_n() заполняет последовательность, начиная с first, n раз вызывая gen, который может быть объектом-функцией или указателем на функцию.

#include <algorithm>

#include <iostream.h>

#include <list>

          

class even_by_twos {

public:

           even_by_twos( int seed = 0 ) : _seed( seed ){}

           int operator()() { return _seed += 2; }



private:

           int _seed;

};

template <class Type>

void print_elements( Type elem ) { cout << elem << " "; }

int main()

{

    list< int, allocator > ilist( 10 );

    void (*pfi)( int ) = print_elements;

    generate_n( ilist.begin(), ilist.size(), even_by_twos() );

    // печатается:

    // generate_n с even_by_twos():

    // 2 4 6 8 10 12 14 16 18 20

   cout << "generate_n с even_by_twos():\n";

   for_each( ilist.begin(), ilist.end(), pfi ); cout << "\n";

   generate_n( ilist.begin(), ilist.size(), even_by_twos( 100 ) );

   // печатается:

   // generate_n с even_by_twos( 100 ):

   // 102 104 106 108 110 112 114 116 118 120

   cout << "generate_n с even_by_twos( 100 ):\n";

   for_each( ilist.begin(), ilist.end(), pfi );

}



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