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)
and
[middle, last)
shall be valid ranges
. The type of
*first shall satisfy
the requirements of
MoveConstructible
(Table
23) and the
requirements of
MoveAssignable
(Table
25)
.Effects:
For each non-negative integer
i < (last - first),
places the element from the position
first + i
into position
first + (i + (last - middle)) % (last - first). Returns: first + (last - middle). Remarks:
This is a left rotate
. Complexity:
At most
last - first
swaps
. 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);
Requires:
The ranges
[first, last)
and
[result, result + (last - first))
shall not overlap
. Effects:
Copies the range
[first, last)
to the range
[result, result + (last - first))
such that for each non-negative integer
i < (last - first)
the following assignment takes place:
*(result + i) = *(first +
(i + (middle - first)) % (last - first)). Returns:
result + (last - first). Complexity:
Exactly
last - first
assignments
.