template<class FwdIt, class OutIt>
OutIt rotate_copy(FwdIt first, FwdIt middle, FwdIt last, OutIt x);
The template function evaluates *(x + N) = *(first + (N + (middle - first)) % (last - first)) once
for each N in the range [0, last - first). Thus, if a ''left'' shift by one element leaves the element originally stored
in *(first + (N + 1) % (last - first)) subsequently stored in *(first + N), then the function can be said
to rotate the sequence either left by middle - first elements or right by last - middle elements as it copies.
Both [first, middle) and [middle, last) must be valid ranges.
If x and first designate regions of storage, the range [x, x + (last - first)) must not overlap the range
[first, last).
See the related sample program.