template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last,
OutputIterator result);
Effects: Копирует элементы диапазона [first, last) в диапазон, [result, result + (last - first)) начиная с first и до last. Для каждого неотрицательного целого числа n < (last - first)выполняется *(result + n) = *(first + n).
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 copy(ExecutionPolicy&& policy,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
Effects: Копирует элементы диапазона [first, last) в диапазон [result, result + (last - first)). Для каждого неотрицательного целого числа n < (last - first)выполняется *(result + n) = *(first + n).
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);
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);
Effects: Копирует все элементы, на которые ссылается итератор, i в диапазоне, [first, last) для которого pred(*i) есть true.
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2
copy_backward(BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
copy_backward следует использовать вместо копирования, когда он last находится в диапазоне [result - (last - first), result).
template<class InputIterator, class OutputIterator>
OutputIterator move(InputIterator first, InputIterator last, OutputIterator result);
Effects: Перемещает элементы диапазона [first, last) в диапазон, [result, result + (last - first)) начиная с первого и заканчивая последним. Для каждого неотрицательного целого числа n < (last-first)выполняется *(result + n) = std::move(*(first + n)).
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 move(ExecutionPolicy&& policy,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
Effects: Перемещает элементы из диапазона [first, last) в диапазон [result, result + (last - first)). Для каждого неотрицательного целого числа n < (last - first)выполняется *(result + n) = std::move(*(first + n)).
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2
move_backward(BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
move_backward следует использовать вместо move, когда последний находится в диапазоне [result - (last - first), result).
template<class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
swap_ranges(ExecutionPolicy&& exec,
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
Requires: Эти два диапазона , [first1, last1) и [first2, first2 + (last1 - first1)) не должны перекрывать. *(first1 + n) будет swappable with *(first2 + n).
Effects: Для каждого неотрицательных целого числа n < (last1 - first1) выполняет: swap(*(first1 + n), *(first2 + n)).
template<class ForwardIterator1, class ForwardIterator2>
void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
Requires: a и b должно быть разыменовано. *a будет swappable with *b.
template<class InputIterator, class OutputIterator,
class UnaryOperation>
OutputIterator
transform(InputIterator first, InputIterator last,
OutputIterator result, UnaryOperation op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class UnaryOperation>
ForwardIterator2
transform(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, UnaryOperation op);
template<class InputIterator1, class InputIterator2,
class OutputIterator, class BinaryOperation>
OutputIterator
transform(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, OutputIterator result,
BinaryOperation binary_op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class ForwardIterator, class BinaryOperation>
ForwardIterator
transform(ExecutionPolicy&& exec,
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator result,
BinaryOperation binary_op);
Effects: Назначает каждому итератору i в диапазоне [result, result + (last1 - first1)) новое соответствующее значение, равное op(*(first1 + (i - result))) или binary_op(*(first1 + (i - result)), *(first2 + (i - result))).
Complexity: Собственно last1 - first1 приложения op или binary_op. Это требование также распространяется на перегрузку с расширением ExecutionPolicy .
Remarks: result может быть равно first в случае унарного преобразования, first1 или first2 в случае двоичного преобразования.
Использование полностью замкнутых диапазонов является преднамеренным.
template<class ForwardIterator, class T>
void replace(ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator, class T>
void replace(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
template<class ForwardIterator, class Predicate, class T>
void replace_if(ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator, class Predicate, class T>
void replace_if(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
Effects: Заменяет элементы, на которые ссылается итератор i в диапазоне [first, last) с new_value, при выполнении следующих соответствующих условий: *i == old_value, pred(*i) != false.
template<class InputIterator, class OutputIterator, class T>
OutputIterator
replace_copy(InputIterator first, InputIterator last,
OutputIterator result,
const T& old_value, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>
ForwardIterator2
replace_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
const T& old_value, const T& new_value);
template<class InputIterator, class OutputIterator, class Predicate, class T>
OutputIterator
replace_copy_if(InputIterator first, InputIterator last,
OutputIterator result,
Predicate pred, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class Predicate, class T>
ForwardIterator2
replace_copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
Predicate pred, const T& new_value);
Effects: Присваивается каждому итератору i в диапазоне [result, result + (last - first)) либо, new_value либо в *(first + (i - result)) зависимости от того, выполняются ли следующие соответствующие условия:
*(first + (i - result)) == old_value pred(*(first + (i - result))) != false
template<class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& value);
template<class ExecutionPolicy, class ForwardIterator, class T>
void fill(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last, const T& value);
template<class OutputIterator, class Size, class T>
OutputIterator fill_n(OutputIterator first, Size n, const T& value);
template<class ExecutionPolicy, class ForwardIterator, class Size, class T>
ForwardIterator fill_n(ExecutionPolicy&& exec,
ForwardIterator first, Size n, const T& value);
Requires: Выражение value должно быть writable передано итератору вывода. Тип Size должен быть преобразован в целочисленный тип ([conv.integral], [class.conv]).
Effects: Эти fill алгоритмы назначения value через все итераторы в диапазоне [first, last). Эти fill_n алгоритмы назначение value через все итераторы в диапазоне , [first, first + n) если n положительно, в противном случае они ничего не делают.
Returns: fill_n возвращает first + n для неотрицательных значений n и first для отрицательных значений.
template<class ForwardIterator, class Generator>
void generate(ForwardIterator first, ForwardIterator last,
Generator gen);
template<class ExecutionPolicy, class ForwardIterator, class Generator>
void generate(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Generator gen);
template<class OutputIterator, class Size, class Generator>
OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
template<class ExecutionPolicy, class ForwardIterator, class Size, class Generator>
ForwardIterator generate_n(ExecutionPolicy&& exec,
ForwardIterator first, Size n, Generator gen);
Requires: gen не принимает аргументов, Size может быть преобразован в целочисленный тип ([conv.integral], [class.conv]).
Effects: Эти generate алгоритмы вызвать объект функции gen и присвоить возвращаемое значение gen через все итераторы в диапазоне [first, last). Эти generate_n алгоритмы вызов функции объекта gen и присвоить возвращаемое значение gen через все итераторы в диапазоне , [first, first + n) если n положительно, в противном случае они ничего не делают.
Returns: generate_n возвращает first + n для неотрицательных значений n и first для отрицательных значений.
template<class ForwardIterator, class T>
ForwardIterator remove(ForwardIterator first, ForwardIterator last,
const T& value);
template<class ExecutionPolicy, class ForwardIterator, class T>
ForwardIterator remove(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
const T& value);
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
Predicate pred);
template<class ExecutionPolicy, class ForwardIterator, class Predicate>
ForwardIterator remove_if(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Predicate pred);
Requires: Тип *first должен удовлетворять требованиям MoveAssignable requirements.
Effects: Устраняет все элементы ссылаются итератором i в диапазоне , [first, last) для которых выполняются следующие соответствующие условия: *i == value, pred(*i) != false.
[ Note: Каждый элемент в диапазоне [ret, last), где ret - возвращаемое значение, имеет допустимое, но неуказанное состояние, потому что алгоритмы могут исключать элементы, перемещаясь из элементов, которые изначально находились в этом диапазоне. ] — end note
template<class InputIterator, class OutputIterator, class T>
OutputIterator
remove_copy(InputIterator first, InputIterator last,
OutputIterator result, const T& value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>
ForwardIterator2
remove_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, const T& value);
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator
remove_copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>
ForwardIterator2
remove_copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, Predicate pred);
Requires: Диапазоны [first, last) и [result, result + (last - first)) не должны перекрываться. Выражение *result = *first действительно. [ Note: Для перегрузок с a ExecutionPolicyможет возникнуть снижение производительности, если iterator_traits<ForwardIterator1>::value_type это не так MoveConstructible (таблица 23). ] — end note
Effects: Копирование всех элементов , упомянутых в итератор i в диапазоне ,[first, last) для которых выполняются соответствующие условия не выполняются: *i == value, pred(*i) != false.
template<class ForwardIterator>
ForwardIterator unique(ForwardIterator first, ForwardIterator last);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last);
template<class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
Requires: Функция сравнения должна быть отношением эквивалентности. Тип *first должен удовлетворять требованиям MoveAssignable requirements.
Effects: Для непустого диапазона удаляет все элементы, кроме первого, из каждой последующей группы эквивалентных элементов, на которые ссылается итератор, i в диапазоне, [first + 1, last) для которого выполняются следующие условия: *(i - 1) == *i или pred(*(i - 1), *i) != false.
Complexity: Для непустых диапазонов - в точности (last - first) - 1 применения соответствующего предиката.
template<class InputIterator, class OutputIterator>
OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
template<class InputIterator, class OutputIterator,
class BinaryPredicate>
OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result, BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, BinaryPredicate pred);
Requires:
Функция сравнения должна быть отношением эквивалентности.
Диапазоны [first, last) и [result, result+(last-first)) не должны перекрываться.
Выражение *result = *first действительно.
Для перегрузок без значения ExecutionPolicyпозвольте T быть типом значения InputIterator. Если InputIterator соответствует требованиям прямого итератора, то дополнительных требований для T. В противном случае, если OutputIterator соответствует требованиям прямого итератора и его тип значения такой же, как T, то T должно быть CopyAssignable. В противном случае T должны быть оба CopyConstructible и CopyAssignable. [ Note: Для перегрузок с an ExecutionPolicyможет возникнуть снижение производительности, если тип значения ForwardIterator1 не является одновременно CopyConstructible и CopyAssignable. ] — end note
Effects: Копирует только первый элемент из каждой последовательной группы равных элементов, на которую ссылается итератор, i в диапазоне, [first, last) для которого выполняются следующие соответствующие условия: *i == *(i - 1) или pred(*i, *(i - 1)) != false.
template<class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);
template<class ExecutionPolicy, class BidirectionalIterator>
void reverse(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last);
Effects: Для каждого неотрицательного целого числа i < (last - first) / 2применяется iter_swap ко всем парам итераторов first + i, (last - i) - 1.
Requires: BidirectionalIterator должны удовлетворять требованиям ValueSwappable.
template<class BidirectionalIterator, class OutputIterator>
OutputIterator
reverse_copy(BidirectionalIterator first, BidirectionalIterator last,
OutputIterator result);
template<class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>
ForwardIterator
reverse_copy(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last,
ForwardIterator result);
Effects: Копирование диапазона [first, last) к диапазону [result, result + (last - first)) , что для любого целого неотрицательного числа i < (last - first) следующего присваивания происходит: *(result + (last - first) - 1 - i) = *(first + i).
template<class ForwardIterator>
ForwardIterator
rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
rotate(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator middle, ForwardIterator last);
Requires: [first, middle) и [middle, last) должны быть допустимые диапазоны. ForwardIterator должны удовлетворять требованиям ValueSwappable. Тип *first должен удовлетворять требованиям MoveConstructible и требованиям MoveAssignable.
Effects: Для каждого неотрицательного целого числа i < (last - first)помещает элемент из позиции first + i в позицию first + (i + (last - middle)) % (last - first).
template<class ForwardIterator, class OutputIterator>
OutputIterator
rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
rotate_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 middle, ForwardIterator1 last,
ForwardIterator2 result);
Effects: Копирование диапазона [first, last) к диапазону [result, result + (last - first)) , что для каждого неотрицательного целого числа i < (last - first) следующего присваивания происходит: *(result + i) = *(first + (i + (middle - first)) % (last - first)).
template<class PopulationIterator, class SampleIterator,
class Distance, class UniformRandomBitGenerator>
SampleIterator sample(PopulationIterator first, PopulationIterator last,
SampleIterator out, Distance n,
UniformRandomBitGenerator&& g);
Requires:
PopulationIterator должны удовлетворять требованиям input iterator.
SampleIterator должны удовлетворять требованиям output iterator.
SampleIterator должен удовлетворять дополнительным требованиям а, random access iterator если не PopulationIterator удовлетворяет дополнительным требованиям а forward iterator.
PopulationIteratorТип значения должен быть writable to out.
Distance должен быть целочисленным типом.
remove_reference_t<UniformRandomBitGenerator> должен соответствовать требованиям uniform random bit generator типа, возвращаемый тип которого может быть преобразован в Distance.
out не должно быть в диапазоне [first, last).
Effects: Копирует min(last - first, n) элементы (the sample) из [first, last) (the population) в так out , чтобы каждый возможный образец имел равную вероятность появления. [ Note: Алгоритмы, обеспечивающие такие эффекты, включают selection sampling и reservoir sampling. ] — end note
template<class RandomAccessIterator, class UniformRandomBitGenerator>
void shuffle(RandomAccessIterator first,
RandomAccessIterator last,
UniformRandomBitGenerator&& g);
Requires: RandomAccessIterator должны удовлетворять требованиям ValueSwappable. Тип remove_reference_t<UniformRandomBitGenerator> должен соответствовать требованиям uniform random bit generator типа, в который можно преобразовать возвращаемый тип iterator_traits<RandomAccessIterator>::difference_type.
Effects: Переставляет элементы в диапазоне [first, last) таким образом, чтобы каждая возможная перестановка этих элементов имела равную вероятность появления.