复制元素
copy(sourceBeg,sourceEnd,destBeg)
copy_backward(sourceBeg,sourceEnd,destEng)
(1)这两个算法都将源区间[sourceBeg,sourceEnd)中的所有元素复制到以destBeg为起点或destEnd为终点的目标区间去;
--如果要把一个区间复制到后端,应使用copy_backward(),所以destEnd()的位置应该在sourceEnd之后
运行结果:
copy(sourceBeg,sourceEnd,destBeg)
copy_backward(sourceBeg,sourceEnd,destEng)
(1)这两个算法都将源区间[sourceBeg,sourceEnd)中的所有元素复制到以destBeg为起点或destEnd为终点的目标区间去;
(2)返回目标区间内最后一个被复制元素的下一位置,也就是第一个未被覆盖的元素的位置;
(3)destBeg或destEnd不可处于[sourceBeg,sourceEnd)区间内;(4)copy()正向遍历序列,而copy_backward()逆向遍历序列。只有在源区间和目标区间存在重复区域时,这个不同点才会导致一些问题:
--如果要把一个区间复制到前端,应使用copy(),所以destBeg的位置应该在sourceBeg之前--如果要把一个区间复制到后端,应使用copy_backward(),所以destEnd()的位置应该在sourceEnd之后
(5)调用者必须确保目标区间有足够空间,要不就得使用insert迭代器;
(6)复杂度:线性;
代码示例:
#include"fuzhu.h"
using namespace std;
int main()
{
vector<char> source(10,'.');
for(int c='a';c<='f';c++)
{
source.push_back(c);
}
source.insert(source.end(),10,'.');
PRINT_ELEMENTS(source,"source: ");
vector<char> c1(source.begin(),source.end());
PRINT_ELEMENTS(c1,"c1: ");
copy(c1.begin()+10,c1.begin()+16,c1.begin()+7);
PRINT_ELEMENTS(c1,"c1: ");
vector<char> c2(source.begin(),source.end());
PRINT_ELEMENTS(c2,"c2: ");
copy_backward(c2.begin()+10,c2.begin()+16,c2.begin()+19);
PRINT_ELEMENTS(c2,"c2: ");
system("pause");
return 0;
}
运行结果:
注意:无论是调用copy()或是copy_backward(),第三参数都不处于源区间中。