gpt4 book ai didi

c++ - 从 STL 列表中删除对象指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:03 26 4
gpt4 key购买 nike

考虑以下导致访问冲突的代码:

for(std::list<ProjectileNode*>::iterator it = m_Projectiles.begin(); it!=m_Projectiles.end(); it++)
{
if(!(*it)->isActive()) //isActive returns a bool
{
m_Projectiles.remove((*it));
}
}

if(!(*it)->isActive()) 导致异常。

我刚开始使用列表,需要一些帮助。指向的对象在其他地方管理,所以我不希望它们被销毁,只是从列表中删除,而不会导致此异常

最佳答案

由于您已经有了指向要从列表中删除的元素的迭代器,因此不应使用 remove(),因为这会再次搜索该元素。相反,请使用 erase(),它还会返回指向已删除元素之后的迭代器。

这导致经典的“删除一些元素”循环,如下所示:

for(std::list<ProjectileNode*>::iterator it = m_Projectiles.begin(); it != m_Projectiles.end(); /*increment in body*/)
{
if(!(*it)->isActive()) //isActive returns a bool
{
it = m_Projectiles.erase(it);
}
else
{
++it;
}
}

当然,@juanchopanza 的回答展示了如何在不使用循环的情况下使用标准算法来做到这一点。

关于c++ - 从 STL 列表中删除对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20854068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com