Каждый из этих алгоритмов читает исходную последовательность и пишет последовательность вывода. Они требуют, чтобы dest
был итератором вывода, а итераторы, обозначающие исходный диапазон, должны быть итераторами ввода.
copy(beg, end, dest)
copy_if(beg, end, dest, unaryPred)
copy_n(beg, n, dest)
Копирует из исходного диапазона последовательности, обозначенные итератором dest
. Алгоритм copy()
копирует все элементы, а алгоритм copy_if()
копирует те из них, для которых предикат unaryPred
истин, а алгоритм copy_n()
копирует первые n
элементов. У исходной последовательности должно быть по крайней мере n
элементов.
move(beg, end, dest)
Вызов функции std::move()
(см. раздел 13.6.1) для каждого элемента в исходной последовательности позволяет переместить этот элемент в последовательность, начиная с итератора dest
.
transform(beg, end, dest, unaryOp)
transform(beg, end, beg2, dest, binaryOp)
Вызывает заданную операцию и пишет ее результат в dest
. Первая версия применяет унарную операцию к каждому элементу в исходном диапазоне. Вторая применяет бинарную операцию к элементам этих двух исходных последовательностей.
replace_copy(beg, end, dest, old_val, new_val)
replace_copy_if(beg, end, dest, unaryPred, new_val)
Копируют каждый элемент в dest
, заменяя определенные элементы значением new_val
. Первая версия заменяет элементы == old_val
, а вторая версия — элементы, удовлетворяющие предикату unaryPred
.
merge(beg1, end1, beg2, end2, dest)
merge(beg1, end1, beg2, end2, dest, comp)
Сортирует обе исходные последовательности. Записывает в dest
объединенную последовательность. Первая версия сравнивает элементы при помощи оператора <
; а вторая использует предоставленный оператор сравнения.
Этим алгоритмам требуются прямые итераторы, поскольку они пишут в элементы своих исходных последовательностей. Итераторы должны предоставлять доступ для записи в элементы.
iter_swap(iter1, iter2)
swap_ranges(beg1, end1, beg2)
Заменяет элемент, обозначенный итератором iter1
, элементом, обозначенным итератором iter2
; или обменивает все элементы в исходном диапазоне с таковыми из второй последовательности, начиная с позиции beg2
. Диапазоны не должны пересекаться. Алгоритм iter_swap()
возвращает void
; алгоритм swap_ranges
возвращает итератор beg2
, увеличенный так, чтобы обозначить элемент сразу после последнего обмененного.
replace(beg, end, old_val, new_val)
replace_if(beg, end, unaryPred, new_val)
Заменяет каждый элемент, соответствующий значению new_val
. Первая версия использует для сравнения элементов со значением old_val
оператор ==
, а вторая заменяет те элементы, для которых истин предикат unaryPred
.
Поскольку этим алгоритмам необходима способность вернуться назад в последовательности, они требуют двунаправленных итераторов.
copy_backward(beg, end, dest)
move_backward(beg, end, dest)
Копирует или перемещает элементы из исходного диапазона в заданный. В отличие от других алгоритмов, dest
— итератор после конца для выходной последовательности (т.е. последовательность назначения закончится непосредственно перед dest
). Последний элемент в исходном диапазоне копируется или перемещается в последний элемент назначения, затем копируется (перемещается) предпоследний элемент и т.д. У элементов в последовательности назначения тот же порядок, что и в исходном диапазоне. Если диапазон пуст, возвращается итератор dest
, в противном случае возвращается итератор на элемент, который был скопирован или перемещен из *beg
.
inplace_merge(beg, mid, end)
inplace_merge(beg, mid, end, comp)