std::copy
是 C++ 标准库中的一个算法函数,用于将一个范围内的元素复制到另一个范围。它定义在头文件 <algorithm>
中。以下是关于 std::copy
的详细解释:
函数原型
template <class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);
参数说明
-
first
:源范围的起始迭代器,表示要复制的元素序列的开始位置。 -
last
:源范围的结束迭代器,表示要复制的元素序列的结束位置(不包含该迭代器指向的元素)。 -
result
:目标范围的起始迭代器,表示复制后的元素将从该位置开始存储。
返回值
std::copy
返回一个 OutputIterator
,指向目标范围的末尾(即最后一个被写入元素的下一个位置)。
功能描述
std::copy
将 [first, last)
范围内的元素复制到以 result
为起始位置的目标范围中。它逐个元素进行复制,直到源范围的结束迭代器 last
被达到。
使用示例
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> destination(source.size());
// 使用 std::copy 将 source 的内容复制到 destination
std::copy(source.begin(), source.end(), destination.begin());
// 输出 destination 的内容
for (int num : destination) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果
1 2 3 4 5
注意事项
-
目标范围的大小:在使用
std::copy
之前,必须确保目标范围具有足够的空间来容纳源范围的元素。否则,可能会导致未定义行为。 -
迭代器类型:
std::copy
要求源范围的迭代器至少是输入迭代器,目标范围的迭代器至少是输出迭代器。 -
性能:
std::copy
的效率通常高于手动使用循环进行复制,尤其是在处理大数据量时。
使用场景
-
容器间复制:将一个容器的内容复制到另一个容器。
-
数组间复制:将一个数组的内容复制到另一个数组。
-
部分复制:从源范围的中间位置开始复制到目标范围。
示例:数组间复制
#include <iostream>
#include <algorithm>
int main() {
int source[] = {1, 2, 3, 4, 5};
int destination[5];
std::copy(std::begin(source), std::end(source), std::begin(destination));
for (int num : destination) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果
1 2 3 4 5
示例:部分复制
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> destination(3);
// 从 source 的第二个元素开始复制 3 个元素到 destination
std::copy(source.begin() + 1, source.begin() + 4, destination.begin());
for (int num : destination) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果
2 3 4