说我有类似的东西
vector<foo*> f;
现在假设我有一个像这样的方法
void RemoveFromFoo(foo* fptr)
{
//search vector and remove if present
}
会像这样的工作吗?
f.erase(std::remove(f.begin(), f.end(), fptr ), f.end());
答案 0 :(得分:3)
是。这是 erase-remove idiom ,用于从contatiner中删除所选元素。
remove
会将您想要保留的所有元素(不等于fptr
的元素)移动到序列的开头,并将迭代器返回到它们之后的第一个元素(第一个)要删除的元素。)
然后erase
将从那里删除元素直到容器结束,只留下你想要保留的那些元素。