Код собирается нормально но при выполнении получаю ошибку доступа:
#include
using namespace std;
int main(){
vector
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;
}
Ответ
После удаления элемента итераторы становятся не валидными. Правильно будет написать следующим образом (я заменил цикл for на while, так как вы итератор it объявили вне цикла, и цикл while в этом случае смотрится лучше. Хотя лучше использовать цикл for с объявлением итератора внутри цикла)
while ( it != v.end() )
if (*it == "+"){
it = v.erase(it);
}
else {
++it;
}
Общий подход для такой задачи пишется в одну строчку
#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 );
Комментариев нет:
Отправить комментарий