Запись в элементы контейнера осуществляется многими алгоритмами. Эти алгоритмы могут отличаться видом итераторов, используемых для обозначения их исходной последовательности, а также тем, осуществляют ли они запись в элементы исходного диапазона или указанного результирующего диапазона.
Для обозначения назначения этим алгоритмам требуются _n
получают второй определяющий количество аргумент и записывают заданный набор элементов по назначению.
fill(beg, end, val)
fill_n(dest, cnt, val)
generate(beg, end, Gen)
generate_n(dest, cnt, Gen)
Присваивают новое значение каждому элементу исходной последовательности. Алгоритм fill()
присваивает значение val
; алгоритм generate()
выполняет объект генератора Gen
. Генератор — это вызываемый объект (см. раздел 10.3.2), возвращающий при каждом вызове разные значения. Алгоритмы fill()
и generate()
возвращают тип void
. Версии _n
возвращают итератор на позицию непосредственно после последнего элемента, записанного в последовательность назначения.
Каждый из этих алгоритмов читает исходную последовательность и пишет последовательность вывода. Они требуют, чтобы 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)