跳到主要内容

std::copy_backward() 算法

// (1)
template< class BidirIt1, class BidirIt2 >
constexpr 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

目标范围的开头。

类型要求

BidirItLegacyBidirectionalIterator

返回值

复制的最后一个元素的迭代器。

复杂度

恰好 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
本文源自此 CppReference 页面。它可能为了改进或编辑偏好而有所修改。单击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。

std::copy_backward() 算法

// (1)
template< class BidirIt1, class BidirIt2 >
constexpr 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

目标范围的开头。

类型要求

BidirItLegacyBidirectionalIterator

返回值

复制的最后一个元素的迭代器。

复杂度

恰好 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
本文源自此 CppReference 页面。它可能为了改进或编辑偏好而有所修改。单击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。