#cpp #алгоритм #stl #vector #вектор
Код собирается нормально но при выполнении получаю ошибку доступа: #include#include #include using namespace std; int main(){ vector v; v.push_back("-"); v.push_back("+"); v.push_back("-"); auto it = v.begin(); for (it; it != v.end(); it++) if (*it == "+"){ v.erase(it); // сдесь ошибка выполнения } return 0; }
Ответы
Ответ 1
После удаления элемента итераторы становятся не валидными. Правильно будет написать следующим образом (я заменил цикл for на while, так как вы итератор it объявили вне цикла, и цикл while в этом случае смотрится лучше. Хотя лучше использовать цикл for с объявлением итератора внутри цикла) while ( it != v.end() ) if (*it == "+"){ it = v.erase(it); } else { ++it; } Общий подход для такой задачи пишется в одну строчку #include#include #include //... v.erase( std::remove( v.begin(), v.end(), "+" ), v.end() ); Если хотите удалить только один элемент, то можно записать следующим образом: auto it = std::find( v.begin(), v.end(), "+" ); if ( it != v.end() ) v.erase( it );
Комментариев нет:
Отправить комментарий