где я ошибаюсь с этой функцией? - PullRequest
0 голосов
/ 10 июля 2020

Итак, я должен переместить все числа палиндромов из вектора mValues ​​в вектор mPalindromes

, и единственными подсказками, которые мне дали, был псевдокод: // итерация по вектору основных значений // если значение это палиндром // добавить его в вектор палиндрома // удалить его из вектора значений

, и вот что я придумал:

for (int i = 0; i < mValues.size(); i++)
    {
        if (IsPalindromeNumber(mValues[i]) )
        {
            mPalindromes.push_back(mValues[i]);

            mValues.pop_back();

            
        }
    }

Если бы кто-нибудь мог сказать мне, где я пошло не так, я был бы признателен.

edit: Я понял, что проблема заключалась в том, что я использовал стирание вместо всплывающего окна.

1 Ответ

2 голосов
/ 10 июля 2020

Когда вы выполняете

mValues.erase(mValues.begin() + i); // with correction from comments

, вы изменяете mValues, поэтому i начинает индексирование в другом месте в mValues. Одно исправление было бы

mValues.erase(mValues.begin() + i);
i--;

, но оно не очень элегантно. Было бы лучше скопировать палиндромы в mPalindromes, а затем использовать std::remove_if или что-то в этом роде во втором проходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...