std::reverse_copy

Header: <algorithm>

  1. Given (\scriptsize N)N as std::distance(first, last). Copies the elements from the range [first,last) (source range) to another range of (\scriptsize N)N elements beginning at d_first (destination range) in such a way that the elements in the destination range are in reverse order.

# Declarations

template< class BidirIt, class OutputIt >
OutputIt reverse_copy( BidirIt first, BidirIt last,
OutputIt d_first );

(constexpr since C++20)

template< class ExecutionPolicy, class BidirIt, class ForwardIt >
ForwardIt reverse_copy( ExecutionPolicy&& policy,
BidirIt first, BidirIt last,
ForwardIt d_first );

(since C++17)

# Parameters

# Return value

Output iterator to the element past the last element copied.

# Notes

Implementations (e.g. MSVC STL) may enable vectorization when the both iterator types satisfy LegacyContiguousIterator and have the same value type, and the value type is TriviallyCopyable.

# Example

#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    auto print = [](const std::vector<int>& v)
    {
        for (const auto& value : v)
            std::cout << value << ' ';
        std::cout << '\n';
    };
 
    std::vector<int> v{1, 2, 3};
    print(v);
 
    std::vector<int> destination(3);
    std::reverse_copy(std::begin(v), std::end(v), std::begin(destination));
    print(destination);
 
    std::reverse_copy(std::rbegin(v), std::rend(v), std::begin(destination));
    print(destination);
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 2074C++98for each i, the assignment was*(d_first + N - i) = *(first + i)[1]corrected to*(d_first + N - 1 - i) = *(first + i)[1]
LWG 2150C++98only one element was required to be assignedcorrected the requirement

# See also