 
 
rotate_copy
|  |  | 
| Category: algorithms | Component type: function | 
Prototype
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle,
                           ForwardIterator last, OutputIterator result);
                   
Description
Rotate_copy copies elements from the range [first, last) to the
range [result, result + (last - first)) such that *middle is
copied to *result, *(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).
Definition
Defined in the standard header algorithm, and in the nonstandard
backward-compatibility header algo.h.
Requirements on types
- 
ForwardIterator is a model of Forward Iterator.
- 
OutputIterator is a model of Output Iterator.
- 
ForwardIterator's value type is convertible to a type in
   OutputIterator's set of value types.
Preconditions
- 
[first, middle) is a valid range.
- 
[middle, last) is a valid range. [1]
- 
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. 
- 
The ranges [first, last) and [result, result + (last - first))
   do not overlap.
Complexity
Linear.  Rotate_copy performs exactly last - first assignments.
Example
const char alpha[] = "abcdefghijklmnopqrstuvwxyz";
rotate_copy(alpha, alpha + 13, alpha + 26, ostream_iterator<char>(cout));
// The output is nopqrstuvwxyzabcdefghijklm
Notes
[1]
It follows from these two requirements that [first, last) is
a valid range.
See also
rotate, copy.
 
![[Silicon Surf]](surf.gif) 
![[STL Home]](stl_home.gif) 
Copyright © 
1999 Silicon Graphics, Inc. All Rights Reserved.
TrademarkInformation