ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
template ‹class ForwardIterator1, class ForwardIterator2, class BinaryPredicate›
ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate binary_pred);
search находит подпоследовательность равных значений в последовательности. search возвращает первый итератор i в диапазоне [first1, last1 - (last2 - first2)) такой, что для любого неотрицательного целого числа n, меньшего чем last2 - first2, выполнены следующие соответствующие условия: *(i+n)==*(first2+n), binary_pred(*(i+n), *(first2+n))==true. Если такой итератор не найден, возвращается last1. Соответствующий предикат применяется, самое большее, (last1 - first1) * (last2 - first2) раз. Квадратичное поведение, однако, является крайне маловероятным.
Меняющие последовательность операции (Mutating sequence operations)
Копировать (Copy)
template ‹class InputIterator, class OutputIterator›
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);
copy копирует элементы. Для каждого неотрицательного целого числа n ‹ (last - first) выполняется присваивание *(result + n) = *(first + n). Точно делается last - first присваиваний. Результат copy не определён, если result находится в диапазоне [first, last).
template ‹class BidirectionalIterator1, class BidirectionalIterator2›
BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result);
copy_backward копирует элементы в диапазоне [first, last) в диапазон [result - (last - first), result), начиная от last-1 и продолжая до first. Его нужно использовать вместо copy, когда last находится в диапазоне [result - (last-first), result). Для каждого положительного целого числа n ‹= (last - first) выполняется присваивание *(result-n) = *(last-n). copy_backward возвращает result - (last-first). Точно делается last - first присваиваний. Результат copy_backward не определён, если result находится в диапазоне [first, last).
Обменять (Swap)
template ‹class T›
void swap(T& a, T& b);
swap обменивает значения, хранимые в двух местах.
template ‹class ForwardIterator1, class ForwardIterator2›
void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
iter_swap обменивает значения, указанные двумя итераторами a и b.
tempate ‹class ForwardIterator1, class ForwardIterator2›
ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2);
Для каждого неотрицательного целого числа n ‹ (last1 - first1) выполняется перестановка: swap(*(first1 + n), *(first2 + n)). swap_ranges возвращает first2 + (last1 - first1). Выполняется точно last1 - first1 перестановок. Результат swap_ranges не определён, если два диапазона [first1, last1) и [first2, first2 + (last1 - first1)) перекрываются.
Преобразовать (Transform)
template ‹class InputIterator, class OutputIterator, class UnaryOperation›
OutputIterator transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op);
template ‹class InputIterator1, class InputIterator2, class OutputIterator, class Binary0peration›
OutputIterator transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryOperation binary_op);