< cpp‎ | algorithm
Revision as of 07:42, 15 August 2013 by P12 (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
Defined in header <algorithm>
template< class BidirIt, class OutputIt >
OutputIt reverse_copy( BidirIt first, BidirIt last, OutputIt d_first );

Copies the elements from the range [first, last) to another range beginning at d_first in such a way that the elements in the new range are in reverse order.

Behaves as if by executing the assignment *(d_first + (last - first) - 1 - i) = *(first + i) once for each non-negative i < (last - first)

If the source and destination ranges (that is, [first, last) and [d_first, d_first+(last-first)) respectively) overlap, the behavior is undefined.



first, last - the range of elements to copy
d_first - the beginning of the destination range
Type requirements
BidirIt must meet the requirements of BidirectionalIterator.
OutputIt must meet the requirements of OutputIterator.

Return value

Output iterator to the element past the last element copied.

Possible implementation

template<class BidirIt, class OutputIt>
OutputIt reverse_copy(BidirIt first, BidirIt last, OutputIt d_first)
    while (first != last) {
        *(d_first++) = *(--last);
    return d_first;


#include <vector>
#include <iostream>
#include <algorithm>
int main()
    std::vector<int> v({1,2,3});
    for (const auto& value : v) {
        std::cout << value << " ";
    std::cout << '\n';
    std::vector<int> destiny(3);
    std::reverse_copy(std::begin(v), std::end(v), std::begin(destiny));
    for (const auto& value : destiny) {
        std::cout << value << " ";
    std::cout << '\n';


1 2 3 
3 2 1


Linear in the distance between first and last

See also

reverses the order of elements in a range
(function template) [edit]