482 Часть ///. Современное программирование на C++

unique. Алгоритм unique удаляет все элементы в последовательности кроме первого, которые удовлетворяют условию равенства или для которых бинарная функция binary_op( element, element+i) возвращает значение "истинно". Проверка на равенство производится с использованием операции =, определенной для данных объектов. Также как для алгоритма remove входная последовательность сжимается, но элементы не уничтожаются. Неиспользованные элементы в конце входной последовательности остаются и могут быть удалены пользователем. Для этой цели можно применить значение, возвращаемое unique.

template <class Forwardlterator> Forwardlterator unique (Forwardlterator first, Forwardlterator last);

template <class Forwardlterator, BinaryPredicate> Porwardlterator unique (Forwardlterator first,

Forwardlterator last,

BinaryPredicate binary_pred) ;

template <class Inputlterator, class OutputIterator> Outputlterator unique copy (Inputlterator first,

Inputlterator last,

Outputlterator result);

template <class Inputlterator, class Outputlterator,

class BinaryPredicate> Outputlterator unique_copy (Inputlterator first,

Inputlterator last,

Outputlterator result,

BinaryPredicate binary_pred) ;

Версия unique_copy отличается от версии unique тем, что результаты копируются в выходную последовательность. Возвращаемое значение указывает на элемент следующий за последним из скопированных в выходную последовательность.

reverse. Алгоритм reverse использует iter_swap для размещения элементов входной последовательности [first, last) в обратном порядке. Версия reverse _сору помещает результаты операции в последовательность [result,

resuit+(last — first)).

template <class Bidirectionallterator> void reverse (Bidirectionallterator first, Bidirectionallterator last) ;

template <class Bidirectionallterator, class OutputIterator> Outputlterator reverse copy (Bidirectionallterator first,

Bidirectionallterator last,

Outputlterator result);