copy是C++ STL 算法组件中的其中一个算法,其作用是将指定序列局部元素复制到另一个序列中。它拥有两个重载函数。其指定序列可以是容器或者数组,另一个序列也可以是容器或者数组。
例子代码:
#include <iostream>
#include <vector>
using namespace std;
void main()
{
//创建两个容器 和 两个数组
vector<int> v = {1,2,3,4,5,6,7,8,9,10 };
vector<int> v2(10);
vector<int>::iterator vi;//迭代器
int arr[10] = { 11,12,13,14,15,16,17,18,19,20 };
int arr2[10] = { 0 };
cout << "执行copy算法前:\n";
// 输出 v
cout << "容器 v: ";
for (vi = v.begin(); vi < v.end(); vi++) { cout << *vi << "\t"; }
cout << endl;
// 输出 v2
cout << "容器 v2: ";
for (vi = v2.begin(); vi < v2.end(); vi++) { cout << *vi << "\t"; }
cout << endl;
// 输出 arr
cout << "数组 arr: ";
for (int i = 0; i<10; i++) { cout << arr[i] << "\t"; }
cout << endl;
// 输出 arr2
cout << "数组 arr2:";
for (int i = 0; i<10; i++) { cout << arr2[i] << "\t"; }
cout << endl;
cout << "\n执行copy算法后:\n";
// STL copy算法
// 1、拷贝源是容器,拷贝目标是容器
copy(v.begin(), v.begin() + 5, v2.begin());
// 输出 v2
cout << "容器 v2: ";
for (vi = v2.begin(); vi < v2.end(); vi++) { cout << *vi << "\t"; }
cout << endl << endl;
// 2、拷贝源是容器,拷贝目标是数组
copy(v.begin(), v.end(), arr2);
// 输出 arr
cout << "数组 arr2:";
for (int i = 0; i<10; i++) { cout << arr2[i] << "\t"; }
cout << endl << endl;
// 3、拷贝源是数组,拷贝目标是容器
copy(arr, arr +5, v2.begin());
// 输出 v2
cout << "容器 v2: ";
for (vi = v2.begin(); vi < v2.end(); vi++) { cout << *vi << "\t"; }
cout << endl << endl;
// 4、拷贝源是数组,拷贝目标是数组
copy(arr, arr + 9, arr2);
// 输出 arr
cout << "数组 arr2:";
for (int i = 0; i<10; i++) { cout << arr2[i] << "\t"; }
cout << endl << endl;
// 5、拷贝源与拷贝目标都是同一个数组
copy(v.begin(), v.begin()+4, v.begin()+5);
// 输出 arr
cout << "容器 v: ";
for (vi = v.begin(); vi < v.end(); vi++) { cout << *vi << "\t"; }
cout << endl << endl;
// 6、拷贝源与拷贝目标都是同一个数组
copy(arr+5, arr +10, arr);
// 输出 arr
cout << "数组 arr: ";
for (int i = 0; i<10; i++) { cout << arr[i] << "\t"; }
cout << endl;
}
运行结果
如上,其拷贝源和拷贝目标都可以是相同或不同的容器或数组,。
Copy 两个重载函数只是参数类型不同,实际实现效果是一样的
Copy(拷贝源要拷贝的起始位置,拷贝源要拷贝的结束位置,拷贝目标要存放拷贝的内容的起始位置);
但需要注意是拷贝元素的数量不能大于拷贝目标用于存放拷贝的内容的容量,例如拷贝源A 的元素个数为10,拷贝目标B的容量大小为5,将A的全部内容都拷贝B,编译器会报错,因为B的容量不足以放置A的所有元素。程序会终止。
感谢您的浏览。