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)). Rotate returns first + (last - middle).