< cpp‎ | algorithm
Revision as of 13:40, 10 February 2013 by Nate (Talk | contribs)

Algorithm library
Execution policies (C++17)
Non-modifying sequence operations
Modifying sequence operations
Operations on uninitialized storage
Partitioning operations
Sorting operations
Binary search operations
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations

Numeric operations
C library

Template:ddcl list begin <tr class="t-dsc-header">

Defined in header <algorithm>

<td></td> <td></td> </tr> <tr class="t-dcl ">

<td class="t-dcl-nopad">
template< class ForwardIt, class OutputIt >

OutputIt rotate_copy( ForwardIt first, ForwardIt n_first,

                      ForwardIt last, OutputIt d_first );

<td class="t-dcl-nopad"> </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end

Copies the elements from the range [first, last), to another range beginning at d_first in such a way, that the element n_first becomes the first element of the new range and n_first - 1 becomes the last element.



first, last - the range of elements to copy
n_first - an iterator to an element in [first, last) that should appear at the beginning of the new range
d_first - beginning of the destination range
Type requirements
ForwardIt must meet the requirements of ForwardIterator.
OutputIt must meet the requirements of OutputIterator.

Return value

Output iterator to the element past the last element copied.

Possible implementation

template<class ForwardIt, class OutputIt>
OutputIt rotate_copy(ForwardIt first, ForwardIt n_first,
                           ForwardIt last, OutputIt d_first)
    d_first = std::copy(n_first, last, d_first);
    return std::copy(first, n_first, d_first);


#include <algorithm>
#include <vector>
#include <iostream>
int main()
    std::vector<int> src = {1, 2, 3, 4, 5}; 
    auto pivot = std::find(src.begin(), src.end(), 3); 
    std::vector<int> dest(src.size());                                          
    std::rotate_copy(src.begin(), pivot, src.end(), dest.begin());
    for (const auto &i : dest) {
        std::cout << i << ' ';
    std::cout << '\n';


3 4 5 1 2


linear in the distance between first and last

See also

Template:cpp/algorithm/dcl list rotate