|Category: algorithms ||Component type: function |
template <class ForwardIterator>
inline ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
Rotate rotates the elements in a range. That is, the element pointed to by
middle is moved to the position
first, the element pointed to by
middle + 1 is moved to the position
first + 1, and so on. One way to think about this operation is that it exchanges the two ranges
[first, middle) and
[middle, last). Formally, for every integer
n such that
0 <= n < last - first, the element
*(first + n) is assigned to
*(first + (n + (last - middle)) % (last - first)).
first + (last - middle).
Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types
[first, middle) is a valid range.
[middle, last) is a valid range. 
Linear. At most
last - first swaps are performed. 
char alpha = "abcdefghijklmnopqrstuvwxyz";
rotate(alpha, alpha + 13, alpha + 26);
 It follows from these two requirements that
[first, last) is a valid range.
Rotate uses a different algorithm depending on whether its arguments are ForwardIterator, BidirectionalIterator, or RandomAccessIterator. All three algorithms, however, are linear.