← 模式

复制一个范围的元素

12345678910111213141516171819#include <vector> #include <algorithm> #include <iterator> std::vector<int> target2(5); std::vector<int> target3; template <typename RangeOfInts> void foo(RangeOfInts source) { std::vector<int> target1{std::begin(source), std::end(source)}; std::copy(std::begin(source), std::end(source), std::begin(target2)); std::copy(std::begin(source), std::end(source), std::back_inserter(target3)); }

此模式采用 CC0 公共领域贡献 许可。

需要 c++11 或更新版本。

意图

将元素从一个范围复制到另一个范围或容器中。

描述

我们从第9行source 范围对象开始,在本示例中,我们假设其元素类型为 int

第11-12行,我们通过将该范围的起始和结束迭代器传递给 std::vector<T> 的构造函数,将元素从 source 范围复制到一个名为 target1 的容器中。我们使用 std::beginstd::end 来获取这些迭代器。

要将 source 的元素复制到一个已经分配了足够数量元素(如第5行target2 所示)的范围或容器中,我们在第14-15行使用 std::copy。前两个迭代器参数表示源范围,第三个迭代器参数表示目标范围的起始位置。要使此方法生效,目标范围中必须已存在元素。

为了演示如何复制到一个尚未包含任何元素的容器中,我们在第6行创建了一个名为 target3 的空 std::vector<int>。对于 std::copy 的第三个参数(第17-18行),我们调用 std::back_inserter 来获取一个迭代器,该迭代器会为每个被复制的元素自动在 target3 上调用 push_back

贡献者

  • Joseph Mansfield

最后更新

2017年12月9日

来源

在 GitHub 上 Fork 此模式

分享