std::copy
是 C++ 标准库中的一个算法,用于将一个序列中的元素复制到另一个位置。这个算法定义在 <algorithm>
头文件中。
---
函数原型
std::copy
有几个不同的重载版本,但以下是最常用的两个:
template <class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);
template <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 copy(ExecutionPolicy&& policy, ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 result);
参数
first
:指向要复制的序列的第一个元素的迭代器。last
:指向要复制的序列的最后一个元素之后的位置的迭代器。result
:指向复制操作的目标序列开始位置的迭代器。policy
(可选):指定执行策略,例如std::execution::seq
(顺序执行)或std::execution::par
(并行执行)。
返回值
std::copy
返回一个迭代器,它指向目标序列中最后一个被复制元素的下一个位置。
示例
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dest(src.size());
// 使用 std::copy 将 src 中的元素复制到 dest
std::copy(src.begin(), src.end(), dest.begin());
// 输出 dest 中的元素
std::copy(dest.begin(), dest.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
return 0;
}
在这个例子中,std::copy
用于将 src
向量中的元素复制到 dest
向量中。
然后,使用 std::ostream_iterator
将 dest
向量中的元素输出到标准输出。
注意事项
std::copy
要求目标序列至少有与源序列一样多的空间来存储复制的元素。- 如果源和目标序列重叠,
std::copy
可能会导致未定义的行为。在这种情况下,应该使用std::copy_backward
。 std::copy
不检查目标序列的大小,因此如果目标序列不够大,可能会导致数据损坏或程序崩溃。std::copy
是通过赋值操作来复制元素的,因此源序列中的元素必须支持赋值操作。如果需要移动语义来提高效率,可以使用std::move
算法。