如何从矢量C++中查找和删除项目

Joh*_*nyF -5 c++ vector

我有一个矢量:

std::vector<User*> myFriends_;
Run Code Online (Sandbox Code Playgroud)

然后我有代码来查看元素是否theFriend存在于向量中.

if (std::find(myFriends_.begin(), myFriends_.end(), theFriend)!=myFriends_.end())
            return FAILURE;
Run Code Online (Sandbox Code Playgroud)

我想做点什么

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
Run Code Online (Sandbox Code Playgroud)

它会起作用吗?

find 返回元素的位置

erase据我所知,需要索引.

P0W*_*P0W 8

std::find(myFriends_.begin(), myFriends_.end(), theFriend);
Run Code Online (Sandbox Code Playgroud)

返回一个类型的迭代器 std::vector<User*>::iterator

所以,你需要拥有

std::vector<User*>::iterator toErease ;

toErease=std::find(myFriends_.begin(), myFriends_.end(), theFriend);

// And then erase if found
if (toErease!=myFriends_.end())
{
   /* Since container element is a pointer to User
      you need to destroy it too ! */
   delete *toErease ;

   myFriends_.erase(toErease);
   //... return SUCCESS ;
}
return FAILURE ; 
Run Code Online (Sandbox Code Playgroud)