C++ STL--Copy() and Copy_backward()

C++ STL --Copy() and Copy_backward()

容器复制是指在两个容器之间进行元素传递,包括copy()和copy_backward()
其原型为

1:   
OutputIterator copy
(inputIterator_First, inputIterator_Last, outputIterator_DestBeg)
2:
BidirectionIterator2 copy_backward
(BidirectionalIterator1_First, BidirectionalIterator1_Last, BidirectionalIterator2_DestEnd)

这两种形式有较大区别,其参数和返回类型也不同

copy()

**copy()**算法实现是将(_First,_Last)指定范围的所有元素复制到另一个容器中由_DestBag指定的起始位置。

copy_backward()

**copy_backward()**算法的输入参数均是双向迭代器,其返回值也是双向迭代器,唯一不同的是:该算法从指定范围的最好有一个元素开始复制,从后向前直到第一个元素。

copy()算法是正向遍历序列,copy_backward()是逆向遍历序列

注意事项

1)STL没有提供copy_if()算法。如果希望实现有条件的复容器中的元素,可以用remove_copy_if()算法
2)如果希望在复制过程中逆转元素的顺序,可以使用reverse_copy()算法
3)确保目标区间有足够的空间,否则使用insert迭代器
4)若实现两个容器间的所有元素的复制,可以不使用copy()和copy_backward()而使用assign()算法
5)如果希望在复制过程中删除部分元素,可以使用remove_copy()和remove_copy_if()算法
6)如果在复制过程中改变元素的数值,需要使用transform()算法和replace_copy()算法
7)如果目标容器是空容器,需要使用插入型迭代器(insert iterator)

示例代码

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
	int temp[] = { 0,1,3,5,7,9,2,4,6,8 };
	int num = 10;
	int *target1 = new int[num];
	//使用copy()算法
	std::copy(temp, temp + num, target1);
	cout << "Target array is: " << endl;
	for (int i = 0; i < num; i++)
	{
		cout << target1[i] << endl;
	}

	//使用copy_backward()算法
	int *target2 = new int[num];
	std::copy_backward(temp, temp + num, target2 + num);
	cout << "Target2 array is: " << endl;
	for (int i = 0; i < num; i++)
	{
		cout << target2[i] << endl;
	}

	delete[] target1;
	delete[] target2;

	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值