Установка A = B как-то портит B? (все векторы) Переполнение стека

Я делаю функцию, которая соответствует двум векторам строк. Как часть этой функции мне нужно сделать копию векторов. Я хотел бы сделать это в начале функции, но каким-то образом это вызывает сбой моих функций, если я это сделаю. Вот как я хотел бы настроить функцию

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

0

Решение

vector<string> u1=u;
u1.erase(u1.begin());

Если u.size() == 0 затем u1.begin() == u1.end(), призвание vector<string>::erase на итераторе, который не указывает на существующий элемент неопределенное поведение.

7

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector