Программирование >>  Инициализация объектов класса, структура 

1 ... 366 367 368 [ 369 ] 370 371 372 ... 395


template< class InputIterator, class Function > Function

for each( InputIterator first,

InputIterator last, Function func );

for each() применяет объект-функцию func к каждому элементу в диапазоне [first,last) . func не может изменять элементы, поскольку итератор записи не гарантирует поддержки присваивания. Если же модификация необходима, следует воспользоваться алгоритмом transform() . func может возвращать значение, но оно

#include <algorithm> #include <vector>

#include <iostream.h>

template <class Type>

void print elements( Type elem ) { cout << elem << ; } int main()

vector< int, allocator > ivec;

for ( int ix = 0; ix < 10; ix++ ) ivec.push back( ix );

void (*pfi)( int ) = print elements; for each( ivec.begin(), ivec.end(), pfi );

return 0;

игнорируется.

template< class ForwardIterator, class Generator > void

generate( ForwardIterator first,

Алгоритм generate()

ForwardIterator last, Generator gen );

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



#include <algorithm>

#include <list>

#include <iostream.h>

int odd by twos() {

static int seed = -1; return seed += 2;

template <class Type>

void print elements( Type elem ) { cout << elem << ; } int main()

list< int, allocator > ilist( 10 ); void (*pfi)( int ) = print elements;

generate( ilist.begin(), ilist.end(), odd by twos );

печатается:

элементы в списке, перв вызов:

1 3 5 7 9 11 13 15 17 19

cout << элементы в списке, перв вызов:\n ; for each( ilist.begin(), ilist.end(), pfi ); generate( ilist.begin(), ilist.end(), odd by twos );

печатается:

элементы в списке, второй вызов: 21 23 25 27 29 31 33 35 37 39

cout << \n\nэлементы в списке, второй вызов:\n ; for each( ilist.begin(), ilist.end(), pfi );

return 0;

template< class OutputIterator,

class Size, class Generator >

void

Алгоритм generate n()

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 );

template< class InputIterator1, class InputIterator2 >

bool

includes( InputIterator1 first1, InputIterator1 last1,

InputIterator2 first2, InputIterator2 last2 );

template< class InputIterator1, class InputIterator2, class Compare >

bool

includes( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,

Алгоритм includes()

Compare comp );

includes() проверяет, каждый ли элемент последовательности [first1,last1) входит в последовательность [first2,last2) . Первый вариант предполагает, что



1 ... 366 367 368 [ 369 ] 370 371 372 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика