rotate_copy |
Copy a sequence, rotating it by n positions.
Perform the same operations as rotate ( first, middle, last ), except the result is placed into a sequence of the same size starting at result . Return an iterator positioned immediately after the last new element.
#include <algorithm>
template< class ForwardIterator, class OutputIterator >
OutputIterator rotate_copy
(
ForwardIterator first,
ForwardIterator middle,
ForwardIterator last,
OutputIterator result
);
Time complexity is linear. Space complexity is constant.
#include <iostream>
#include <algorithm>
int numbers[ 6 ] = { 0, 1, 2, 3, 4, 5 };
void
main()
{
int result[ 6 ];
rotate_copy
(
numbers,
numbers + 3,
numbers + 6,
result
);
for ( int i = 0; i < 6; ++i )
cout << result[ i ] << ` `;
cout << "\n";
}
3 4 5 0 1 2
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
void
main()
{
vector< int > v1( 10 );
for ( int j = 0; j < v1.size(); ++j )
v1[ j ] = j;
ostream_iterator< int > iter( cout, " " );
copy( v1.begin(), v1.end(), iter );
cout << "\n";
vector< int > v2( v1.size() );
for ( int i = 0; i < v1.size(); ++i )
{
rotate_copy( v1.begin(), v1.begin() + i, v1.end(), v2.begin() );
ostream_iterator< int > iter( cout, " " );
copy( v2.begin(), v2.end(), iter );
cout << "\n";
}
cout << "\n";
}
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
9 0 1 2 3 4 5 6 7 8
Copyright©1994-2026 Recursion Software LLC
All Rights Reserved - For use by licensed users only.