suyixiu 2019-08-18 18:33 采纳率: 0%
浏览 530

STL中的copy()与copy_backward()效果真的有区别?

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的效果一毛一样呀。有哪位大佬告知一下问题出在哪吗?

  • 写回答

2条回答 默认 最新

  • Italink 2019-08-18 21:23
    关注

    “copy_backward就不会覆盖”你从哪看到的?

    是会覆盖,这两个函数为了适用于不同的情况,比如你拿copy来实现copy_backward同样的功能,3和13是你自己设置的例子你当然知道,且你用的vector使用的是随机访问迭代器,支持+操作,那么如果迭代器只是一个简单的双向迭代器,只支持++,--,那么你实现相同的功能是否就会变的很麻烦?

    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档