@Loligan

Не удаляет int в векторе через итератор, как исправить?

Не удаляет =(

vector friends;

bool function::del_friend(human *hmn, int id_user)
{
cout<<"START "<friends.size()<friends.size()==0)
{
return false;
}
for(vector::iterator it=hmn->friends.begin(); it != hmn->friends.end(); ++it)
{
if(id_user==*it)
{
hmn->friends.erase(it);
it--;
}
}
cout<<"DELETE OK "<friends.size()<
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 3
dnovikoff
@dnovikoff
Ну прежде всего erase возвращает итератор на елемент, следующий за удаленным
it = hmn->friends.erase(it);
Вариант с --it не валиден.

Во вторых лаконичнее будет воспользоваться erase-remove идиомой https://en.wikipedia.org/wiki/Erase–remove_idiom
там есть пример на ваш случай
Ответ написан
@Dvvarreyn
{
return false;
}

Это что?
Или из-за оформления там if побился?
При текущем оформление вообще не очевидно, что до цикла функция может дойти.
Ответ написан
chlp
@chlp
фулстек
Оформите нормально код и поставьте вывод внутри условия с удалением
if(id_user==*it)
{
    cout << "erase";
    hmn->friends.erase(it);
    it--;
}

Не удаляет или не находит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы