← 模式
复制一个范围的元素
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 |
此模式采用 CC0 公共领域贡献 许可。
需要 c++11 或更新版本。
意图
将元素从一个范围复制到另一个范围或容器中。
描述
我们从第9行的 source
范围对象开始,在本示例中,我们假设其元素类型为 int
。
在第11-12行,我们通过将该范围的起始和结束迭代器传递给 std::vector<T>
的构造函数,将元素从 source
范围复制到一个名为 target1
的容器中。我们使用 std::begin
和 std::end
来获取这些迭代器。
要将 source
的元素复制到一个已经分配了足够数量元素(如第5行的 target2
所示)的范围或容器中,我们在第14-15行使用 std::copy
。前两个迭代器参数表示源范围,第三个迭代器参数表示目标范围的起始位置。要使此方法生效,目标范围中必须已存在元素。
为了演示如何复制到一个尚未包含任何元素的容器中,我们在第6行创建了一个名为 target3
的空 std::vector<int>
。对于 std::copy
的第三个参数(第17-18行),我们调用 std::back_inserter
来获取一个迭代器,该迭代器会为每个被复制的元素自动在 target3
上调用 push_back
。