Выбрать главу

// &found_it2: 0x100067b0

if ( found_it2 != svec.end() )

cout "тоже найдено: " *found_it2 "\n\t"

"&svec.end()-2:\t" && svec.end()-2 && "\n\t"

"&found_it2:\t" && found_it2 && "\n";

}

Алгоритм for_each()

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;

}

Алгоритм generate()

template class ForwardIterator, class Generator

void

generate( ForwardIterator first,

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;

}

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

}

Алгоритм includes()

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,

Compare comp );

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

#include algorithm

#include vector

#include iostream.h

int main()

{

int ia1[] = { 13, 1, 21, 2, 0, 34, 5, 1, 8, 3, 21, 34 };

int ia2[] = { 21, 2, 8, 3, 5, 1 };

// алгоритму includes следует передавать отсортированные контейнеры

sort( ia1, ia1+12 ); sort( ia2, ia2+6 );

// печатает: каждый элемент ia2 входит в ia1? Да

bool res = includes( ia1, ia1+12, ia2, ia2+6 );

cout "каждый элемент ia2 входит в ia1? "