std::copy_backward

Header: <algorithm>

Copies the elements from the range [first,last) to another range ending at d_last. The elements are copied in reverse order (the last element is copied first), but their relative order is preserved.

# Declarations

template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );

(constexpr since C++20)

# Parameters

# Return value

Iterator to the last element copied.

# Notes

When copying overlapping ranges, std::copy is appropriate when copying to the left (beginning of the destination range is outside the source range) while std::copy_backward is appropriate when copying to the right (end of the destination range is outside the source range).

# Example

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
 
int main()
{
    std::vector<int> source(4);
    std::iota(source.begin(), source.end(), 1); // fills with 1, 2, 3, 4
 
    std::vector<int> destination(6);
 
    std::copy_backward(source.begin(), source.end(), destination.end());
 
    std::cout << "destination contains: ";
    for (auto i: destination)
        std::cout << i << ' ';
    std::cout << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 1206C++981. the behavior was well-defined if d_last == last2. the behavior was undefined if d_last == first1. made undefined2. made well-defined

# See also