template ‹class InputIterator, class OutputIterator, class T›
OutputIterator remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value);
template ‹class InputIterator, class OutputIterator, class Predicate›
OutputIterator remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred);
remove_copy копирует все элементы, указываемые итератором i в диапазоне [first, last), для которых не выполнены следующие соответствующие условия: *i==value, pred(*i)==true. remove_copy возвращает конец возникающего в результате своей работы диапазона. remove_copy устойчив, то есть относительный порядок элементов в результирующем диапазоне такой же, как их относительный порядок в первоначальном диапазоне. Соответствующий предикат применяется точно last-first раз.
Убрать повторы (Unique)
template ‹class ForwardIterator›
ForwardIterator unique(ForwardIterator first, ForwardIterator last);
template ‹class ForwardIterator, class BinaryPredicate›
ForwardIterator unique(ForwardIterator first, ForwardIterator last, BinaryPredicate binary_pred);
unique устраняет все, кроме первого, элементы из каждой последовательной группы равных элементов, указываемые итератором i в диапазоне [first, last), для которых выполнены следующие соответствующие условия: *i==*(i-1) или binary_pred(*i, *(i-1))==true. unique возвращает конец возникающего в результате диапазона. Соответствующий предикат применяется точно (last-first)-1 раз.
template ‹class InputIterator, class OutputIterator›
OutputIterator unique_copy(InputIterator first, InputIterator last, OutputIterator result);
template ‹class InputIterator, class OutputIterator, class BinaryPredicate›
OutputIterator unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate binary_pred);
unique_copy копирует только первый элемент из каждой последовательной группы равных элементов, указываемых итератором i в диапазоне [first, last), для которых выполнены следующие соответствующие условия: *i==*(i-1) или binary_pied(*i, *(i-1))==true. unique_copy возвращает конец возникающего в результате диапазона. Соответствующий предикат применяется точно (last-first)-1 раз.
Расположить в обратном порядке (Reverse)
template ‹class BidirectionalIterator›
void reverse(BidirectionalIterator first, BidirectionalIterator last);
Для каждого неотрицательного целого числа i‹=(last-first)/2 функция reverse применяет перестановку ко всем парам итераторов first+i, (last-i)-1. Выполняется точно (last-first)/2 перестановок.
template ‹class BidirectionalIterator, class OutputIterator›
OutputIterator reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result);
reverse_copy копирует диапазон [first, last) в диапазон [result, result+(last-first)) такой, что для любого неотрицательного целого числа i ‹ (last-first) происходит следующее присваивание: *(result+(last-first)-i) = *(first+i). reverse_copy возвращает result+(last-first). Делается точно last-first присваиваний. Результат reverse_copy не определён, если [first, last) и [result, result +(last-first)) перекрываются.
Переместить по кругу (Rotate)
template ‹class ForwardIterator›
void rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last);
Для каждого неотрицательного целого числа i ‹ (last-first) функция rotate помещает элемент из позиции first+i в позицию first+(i+(last-middle))%(last-first). [first, middle) и [middle, last) - допустимые диапазоны. Максимально выполняется last-first перестановок.