设置 A=B 会以某种方式弄乱 B 吗?(所有向量)C++

Does setting A=B somehow mess with B? (all vectors) C++

本文关键字:向量 C++ 方式弄 设置      更新时间:2023-10-16

我制作一个匹配两个字符串向量的函数。作为该函数的一部分,我需要复制向量。我想在函数开始时这样做,但如果我这样做,它会以某种方式使我的函数崩溃。这就是我想设置函数的方式

vector<string> match(vector<string> & u,vector<string> & v){
// I would like to define these first, but that crashes my function
    vector<string> u1=u;
    vector<string> v1=v;
    u1.erase(u1.begin());
    v1.erase(v1.begin());
// I would like to define these first, but that crashes my function
    if(u.size()==0){
        return u;
    }
    if(v.size()==0){
        return v;
    }
    if(u.at(0)==v.at(0)){
        vector<string>result=match(u1,v1);
        result.insert(result.begin(),u[0]);
        return result;
    }
    if(match(u,v1)>=match(u1,v)){
        vector<string>result= match(u,v1);
        return result;
    }
    else{
        return match(u1,v);
    }
}

但是,一个简单的开关确实可以使该功能工作,我不明白为什么

vector<string> match(vector<string> & u,vector<string> & v){
//Putting these if statements first makes the function work
    if(u.size()==0){
        return u;
    }
    if(v.size()==0){
        return v;
    }
//Putting these if statements first makes the function work
    vector<string> u1=u;
    vector<string> v1=v;
    u1.erase(u1.begin());
    v1.erase(v1.begin());

    if(u.at(0)==v.at(0)){
        vector<string>result=match(u1,v1);
        result.insert(result.begin(),u[0]);
        return result;
    }
    if(match(u,v1)>=match(u1,v)){
        vector<string>result= match(u,v1);
        return result;
    }
    else{
        return match(u1,v);
    }
}
vector<string> u1=u;
u1.erase(u1.begin());

如果u.size() == 0u1.begin() == u1.end().在不指向现有元素的迭代器上调用vector<string>::erase未定义的行为