// &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? "