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;
}