copy 的使用

8 篇文章 0 订阅

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的所有元素。程序会终止。

感谢您的浏览。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值