安全地从指针矢量中删除
Safely erasing from vector of pointers
好吧,这可能是非常基本的,但我以前从未做过。
我有一个 Particle
s 的矢量,当它们离开可见屏幕时,我想擦除它们。我查找了擦除删除习惯用法,但我不知道如何使其工作,因为我还需要删除Particle
实例。我尝试了向后迭代,但没有成功:
for ( std::vector<Particle*>::reverse_iterator rit = particles.rbegin(); rit != particles.rend(); ++rit )
{
if ( IsOffScreen((*rit)->pos) )
{
delete (*rit.base());
particles.erase(rit.base());
}
}
在运行时崩溃时,Visual Studio说"iterator cannot be decremented"
。我做错了什么?有没有更好的方法?
怎么样:
for (std::vector<Particle*>::iterator it = particles.begin(); it != particles.end(); ++it) {
if (IsOffScreen((*it)->pos)) {
delete *it;
*it = NULL;
}
}
particles.erase(std::remove(particles.begin(), particles.end(), NULL), particles.end());
还有其他各种选项 - 您实际上可以在谓词中删除它们,例如,因为 IIRC 保证在每个项目上只运行一次。
对于这种事情,您确实需要小心remove
和remove_if
,因为删除的对象处于未定义状态,因此无法remove
它们并在之后删除(您可以使用std::partition
,但它更慢)。
相关文章:
- 无法删除指针,已触发断点
- 删除指针数组 (C++) 中的元素
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 为什么const_cast删除指针的恒常性,而不删除指向常量的指针的恒常性?
- 删除指针后内存泄漏
- 这是系统资源吗?(或者我怎么知道我是否需要删除指针) - 在 C++ 中使用 C
- C++ 从 2 组指针中删除指针
- 当删除 [] 指针工作时,为什么无法获得指向的数组大小?
- 在这种情况下,删除指针数组期间会发生什么?
- 在C++中删除指针数组时析构函数崩溃
- 何时/如何在使用指针后正确删除指针?
- 在C++库中,谁应该删除指针、用户或库?
- 删除指针后阻止对象使用 "this"
- 删除指针后C++尝试/捕获
- 删除指针内存分配以避免内存泄漏
- 删除指针时,未分配被释放的 C++ 指针错误
- 如何从抽象类中删除指针
- 我应该在 v8::外部手动删除指针吗?
- 删除指针
- C 如何删除指针的默认对象成员