ostream_iteratorint(cout," "));

cout endl;

adjacent_difference(ilist.begin(), ilist.end(),

ilist_result.begin(), timesint() );

// на выходе печатается:

// 1 1 2 6 15 40

copy( ilist_result.begin(), ilist_result.end(),

ostream_iteratorint(cout," "));

cout endl;

}

Алгоритм adjacent_find()

template class ForwardIterator

ForwardIterator

adjacent_find( ForwardIterator first, ForwardIterator last );

template class ForwardIterator, class BinaryPredicate

ForwardIterator

adjacent_find( ForwardIterator first,

ForwardIterator last, Predicate pred );

adjacent_find() ищет первую пару одинаковых соседних элементов в диапазоне, ограниченном итераторами [first,last). Если соседние дубликаты найдены, то алгоритм возвращает однонаправленный итератор, указывающий на первый элемент пары, в противном случае возвращается last. Например, если дана последовательность {0,1,1,2,2,4}, то будет найдена пара [1,1] и возвращен итератор, указывающий на первую единицу.

#include algorithm

#include vector

#include iostream.h

#include assert.h

class TwiceOver {

public:

bool operator() ( int val1, int val2 )

{ return val1 == val2/2 ? true : false; }

};

int main()

{

int ia[] = { 1, 4, 4, 8 };

vector int, allocator vec( ia, ia+4 );

int *piter;

vector int, allocator ::iterator iter;

// piter указывает на ia[1]

piter = adjacent_find( ia, ia+4 );

assert( *piter == ia[ 1 ] );

// iter указывает на vec[2]

iter = adjacent_find( vec.begin(), vec.end(), TwiceOver() );

assert( *iter == vec[ 2 ] );

// пришли сюда: все хорошо

cout "ok: adjacent-find() завершился успешно!\n";

return 0;

}

<p>Алгоритм binary_search()</p>

template class ForwardIterator, class Type

bool

binary_search( ForwardIterator first,

ForwardIterator last, const Type &value );

template class ForwardIterator, class Type

bool

binary_search( ForwardIterator first,

ForwardIterator last, const Type &value,

Compare comp );

binary_search() ищет значение value в отсортированной последовательности, ограниченной парой итераторов [first,last). Если это значение найдено, возвращается true, иначе - false. В первом варианте предполагается, что контейнер отсортирован с помощью оператора "меньше". Во втором варианте порядок определяется указанным объектом-функцией.

#include algorithm

#include vector

#include assert.h

int main()

{

int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40};

vector int, allocator vec( ia, ia+12 );

sort( &ia[0], &ia[12] );

bool found_it = binary_search( &ia[0], &ia[12], 18 );

assert( found_it == false );

vector int vec( ia, ia+12 );

sort( vec.begin(), vec.end(), greaterint() );

found_it = binary_search( vec.begin(), vec.end(),

26, greaterint() );

assert( found_it == true );

}

<p>Алгоритм copy()</p>

template class InputIterator, class OutputIterator

OutputIterator

copy( InputIterator first1, InputIterator last,

OutputIterator first2 )

Перейти на страницу:

Похожие книги