emmmm。copy是从第一个开始复制的,copy_backward是从末尾开始复制的。这确实没有问题。然后如下图同一个数组用copy然后有重叠的话会导致覆盖,而copy_backward就不会覆盖,看起来确实是没有问题。
使用如下代码的时候发现并不是这回事啊
#include <iostream>
#include <math.h>
#include <string.h>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
void printf_vector(string str, vector<int> &V) //打印vector中所有的元素
{
cout << str;
for (int i = 0; i < V.size(); i++)
{
cout << V[i] << " ";
}
cout << endl;
}
int main()
{
vector<int> V1, V2;
for (int i = 0; i < 10; i++) //V1跟V2都变成0-9
{
V1.push_back(i);
V2.push_back(i);
}
printf_vector("V1 ", V1);
printf_vector("V2 ", V2);
V1.resize(20); //resize成20,新加的自动置为零
V2.resize(20);
printf_vector("V1 ", V1);
printf_vector("V2 ", V2);
copy(V1.begin(), V1.begin() + 10, V1.begin() + 3); //前10个元素复制到begin+3位置后 顺序
copy_backward(V2.begin(), V2.begin() + 10, V2.begin() + 13); //前10个元素复制到begin+13位置前 倒序
printf_vector("V1 ", V1);
printf_vector("V2 ", V2);
system("pause");
return 0;
}
效果如下图
可见copy并没有出现覆盖啊,数据平移得好好的,跟copy_backward的效果一毛一样呀。有哪位大佬告知一下问题出在哪吗?