c++ - 如何通过指针删除 vector 元素?

标签 c++ pointers vector

我有这个:

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/

相关文章:

Android NDK : Aborting. 停止

c - 为什么 swap(&a++,&b++) 给出错误 "invalid lvalue in unary ' &'"?

PHP 5 : return by ref method produces unexpected results

c++ - "C++ compilers use a binary object layout"这句话的含义和用途是什么

c++ - 如何使用erase和iterator删除二维 vector 中的某一项?

c++ - 从 Cocos2d::Layer 派生的类有一个指针数据成员。该成员也有 vector 容器。当调用 vector::push_back 时它会崩溃

c++ - 无法在类内初始化多维数组

android - Qt QML - 处理导航按钮?

c++ - 有没有办法递归遍历矩阵的所有可能子矩阵,同时防止访问某些子矩阵?

c++ - 从 Vector 内部的结构获取浮点值