28 Algorithms library [algorithms]

28.6 Mutating sequence operations [alg.modifying.operations]

28.6.1 Copy [alg.copy]

template<class InputIterator, class OutputIterator> OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);

Requires: result не должно быть в диапазоне [first, last).

Effects: Копирует элементы диапазона [first, last) в диапазон, [result, result + (last - first)) начиная с first и до last. Для каждого неотрицательного целого числа n < (last - first)выполняется *(result + n) = *(first + n).

Returns: result + (last - first).

Complexity: Собственно last - first задания.

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2> ForwardIterator2 copy(ExecutionPolicy&& policy, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result);

Requires: Диапазоны [first, last) и [result, result + (last - first)) не должны перекрываться.

Effects: Копирует элементы диапазона [first, last) в диапазон [result, result + (last - first)). Для каждого неотрицательного целого числа n < (last - first)выполняется *(result + n) = *(first + n).

Returns: result + (last - first).

Complexity: Собственно last - first задания.

template<class InputIterator, class Size, class OutputIterator> OutputIterator copy_n(InputIterator first, Size n, OutputIterator result); template<class ExecutionPolicy, class ForwardIterator1, class Size, class ForwardIterator2> ForwardIterator2 copy_n(ExecutionPolicy&& exec, ForwardIterator1 first, Size n, ForwardIterator2 result);

Effects: Для каждого неотрицательного целого числа i<nвыполняется *(result + i) = *(first + i).

Returns: result + n.

Complexity: Собственно n задания.

template<class InputIterator, class OutputIterator, class Predicate> OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate> ForwardIterator2 copy_if(ExecutionPolicy&& exec, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result, Predicate pred);

Requires: Диапазоны [first, last) и [result, result + (last - first)) не должны перекрываться. [ Note: Для перегрузки с a ExecutionPolicyможет возникнуть снижение производительности, если iterator_­traits<ForwardIterator1>​::​value_­type это не так MoveConstructible (таблица 23). ]end note

Effects: Копирует все элементы, на которые ссылается итератор, i в диапазоне, [first, last) для которого pred(*i) есть true.

Returns: Конец получившегося диапазона.

Complexity: Точно last - first применения соответствующего предиката.

Remarks: Stable.

template<class BidirectionalIterator1, class BidirectionalIterator2> BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result);

Requires: result не должно быть в диапазоне (first, last].

Effects: Копирует элементы диапазона [first, last) в диапазон, [result - (last-first), result) начиная с last - 1 и до first.263 Для каждого положительного целого числа n <= (last - first)выполняется *(result - n) = *(last - n).

Returns: result - (last - first).

Complexity: Собственно last - first задания.

copy_­backward следует использовать вместо копирования, когда он last находится в диапазоне [result - (last - first), result).