我有这个:
vector<Object*> myVec;
并将我的对象添加到其中,如下所示:
Object *obj1 = new Object;
myVec.push_back(obj1);
假设我有 100 个对象,指针为 *obj1、*obj2 ... *obj100。
现在我想从 vector 中删除 obj37。我希望我能像插入它一样做到这一点:
myVec.remove_back(obj37);
如果有一个像“remove_back”这样的函数那就太棒了,但我认为没有。 我希望您能明白这一点,并请帮助我。
顺便说一下,看看这个 question ,在接受的答案中,有删除算法按值工作:
vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());
我尝试了一下,用指针来实现,我什至不相信这会起作用并且令人惊讶;它没有:
myVec.erase(std::remove(myVec.begin(), myVec.end(), *obj37), vec.end());
是的,我知道我只是胡说八道,但你明白了。某个地方应该有一个像这样的简单解决方案,我只是想要那样。
最佳答案
您即将完成:按值搜索元素:
myVec.erase(std::remove(myVec.begin(), myVec.end(), obj37), myvec.end());
// ^^^^^
或者,如果您知道该元素位于位置 36(从 0 开始),则可以直接删除它:
myvec.erase(myvec.begin() + 36);
或者,在现代 C++ 中:
myvec.erase(next(begin(myvec), + 36));
另请注意,std::remove
会搜索整个 vector ,因此,如果您知道只有一个元素,则可以使用 find
来代替,只要你找到了值:
{
auto it = std::find(myVec.begin(), myVec.end(), obj37);
if (it != myVec.end()) { myVec.erase(it); }
}
关于c++ - 如何通过指针删除 vector 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26567687/