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)).