|Category: algorithms ||Component type: function |
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle,
ForwardIterator last, OutputIterator result);
Rotate_copy copies elements from the range
[first, last) to the range
[result, result + (last - first)) such that
*middle is copied to
*(middle + 1) is copied to
*(result + 1), and so on. Formally, for every integer
n such that
0 <= n < last - first,
rotate_copy performs the assignment
*(result + (n + (last - middle)) % (last - first)) = *(first + n).
Rotate_copy is similar to
copy followed by
rotate, but is more efficient. The return value is
result + (last - first).
Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types
ForwardIterator is a model of ForwardIterator.
OutputIterator is a model of OutputIterator.
ForwardIterator's value type is convertible to a type in
OutputIterator's set of value types.
[first, middle) is a valid range.
[middle, last) is a valid range. 
There is enough space to hold all of the elements being copied. More formally, the requirement is that
[result, result + (last - first)) is a valid range.
[first, last) and
[result, result + (last - first)) do not overlap.
Rotate_copy performs exactly
last - first assignments.
const char alpha = "abcdefghijklmnopqrstuvwxyz";
rotate_copy(alpha, alpha + 13, alpha + 26, ostream_iterator<char>(cout));
 It follows from these two requirements that
[first, last) is a valid range.