Я пишу функцию для пересечения двух отсортированных vector<size_t>
с именами a
и b
.Функция выполняет итерацию по обоим векторам, удаляя из a
все, что не находится в b
, поэтому все, что остается в a
, является пересечением двух.Код здесь:
void intersect(vector<size_t> &a, vector<size_t> &b) {
vector<size_t>::iterator aItr = a.begin();
vector<size_t>::iterator bItr = b.begin();
vector<size_t>::iterator aEnd = a.end();
vector<size_t>::iterator bEnd = b.end();
while(aItr != aEnd) {
while(*bItr < *aItr) {
bItr++;
if(bItr == bEnd) {
a.erase(aItr, aEnd);
return;
}
}
if (*aItr == *bItr) aItr++;
else aItr = a.erase(aItr, aItr+1);
}
}
Я получаю очень ошибку.Я захожу в отладчик, и как только он проходит строку 8 "while(*bItr < *aItr)
" b
, кажется, исчезает.Отладчик, кажется, не знает, что b
даже существует!Когда b
возвращается после того, как возвращается к вершине цикла, он принимает значения a
!
Такое поведение я ожидаю увидеть в динамической памяти.ошибка, но, как вы можете видеть, я не управляю динамической памятью здесь.Я очень запутался и действительно мог бы помочь.
Заранее спасибо!