У меня есть вектор:как найти и удалить элемент из вектора C++
std::vector<User*> myFriends_;
Тогда у меня есть код, чтобы увидеть, если элемент theFriend
существует в векторе.
if (std::find(myFriends_.begin(), myFriends_.end(), theFriend)!=myFriends_.end())
return FAILURE;
Я хотел бы сделать некоторые вещи, как
User* toErease;
toErease=std::find(myFriends_.begin(), myFriends_.end(), theFriend);
if (toErease!=myFriends_.end())
return FAILURE;
myFriends_.erase(toErease); /// remove this element if its precent
Будет ли она работать?
find
возвращает расположение элемента
И erase
нуждается в индексе, насколько я знаю.
https://en.wikipedia.org/wiki/Eras e-remove_idiom – Borgleader
Вызов 'std :: vector :: erase' с итератором, возвращаемым' std :: find'. – juanchopanza
'theFriend)! = MyFriends_.end()' не является подходящим предикатом. Поместите это в лямбда-функцию или класс функтора. Также ['remove_if()'] (http://en.cppreference.com/w/cpp/algorithm/remove) может помочь упростить. –