std::copy_backward() 算法
- 自 C++20 起
- 直到 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) 将定义在 [
first
;last
) 范围内的元素复制到另一个以d_last
结尾的范围。元素以相反的顺序复制(最后一个元素首先复制),但它们的相对顺序得到保留。未定义行为如果
d_first
在 [first
;last
) 范围内,则行为是未定义的。在这种情况下,可以改用std::copy_backward
。
参数
first last | 要复制的元素范围。 |
d_first | 目标范围的开头。 |
类型要求
BidirIt | LegacyBidirectionalIterator |
返回值
复制的最后一个元素的迭代器。
复杂度
恰好 last - first
次赋值。
异常
(无)
可能的实现
copy_backward (1)
template<class BidirIt1, class BidirIt2>
BidirIt2 copy_backward_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last)
{
while (first != last)
*(--d_last) = *(--last);
return d_last;
}
备注
当复制重叠范围时
std::copy
适用于向左复制(目标范围的开始位于源范围之外)。std::copy_backward
适用于向右复制(目标范围的结束位于源范围之外)。
示例
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';
}
输出
destination contains: 0 0 1 2 3 4