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.

Library

Standards<ToolKit>

Declaration


#include <algorithm>

template< class ForwardIterator, class OutputIterator >
OutputIterator rotate_copy
  (
  ForwardIterator first,
  ForwardIterator middle,
  ForwardIterator last,
  OutputIterator result
  );
  

Complexity

Time complexity is linear. Space complexity is constant.

Example <ospace/osstd/examples/rotcopy0.cpp>
#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
Example <ospace/osstd/examples/rotcopy1.cpp>
#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.