std::copy_backward() algorithm
- since C++20
- until C++20
// (1)
template< class BidirIt1, class BidirIt2 >
constexpr BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
// (1)
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
-
(1) Copies the elements from the range, defined by [
first
;last
), to another range ending atd_last
. The elements are copied in reverse order (the last element is copied first), but their relative order is preserved.Undefined BehaviourThe behavior is undefined if
d_first
is within [first
;last
). In this case,std::copy_backward
may be used instead.
Parameters
first last | The range of elements to copy. |
d_first | The beginning of the destination range. |
Type requirements
BidirIt | LegacyBidirectionalIterator |
Return value
Iterator to the last element copied.
Complexity
Exactly last - first
assignments.
Exceptions
(none)
Possible implementation
copy_backward (1)
Notes
When copying overlapping ranges:
std::copy
is appropriate when copying to the left (beginning of the destination range is outside the source range).std::copy_backward
is appropriate when copying to the right (end of the destination range is outside the source range).
Examples
Main.cpp
#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';
}
Output
destination contains: 0 0 1 2 3 4
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.
Hover to see the original license.