gpt4 book ai didi

c++ - vector 迭代器根据条件删除两个元素

转载 作者:行者123 更新时间:2023-11-30 02:35:13 24 4
gpt4 key购买 nike

如果满足某些条件,我目前正在尝试从 vector 中删除 2 个元素。我可以成功删除单个元素而不会发生“vector iterator not dereferencable”错误,我知道问题是由一次删除两个元素引起的,这会扰乱 Iterators 但我不确定删除多个元素的正确方法元素一次。

vector<SomeObj*> objs;

vector<SomeObj*>::iterator it = objs.begin();
while (it != objs.end())
{
vector<SomeObj*>::iterator it2 = objs.begin();
bool deleted = 0;

while (it2 != objs.end())
{
if ((*it)->somecondition(**it2))
{
delete *it2;
*it2 = NULL;
it = objs.erase(it2);

delete *it;
*it = NULL;
it = objs.erase(it); //Will error here due to invalidating the iterator

deleted = 1;
break;
}
++it2;
}

if (!deleted)
++it;
}

最佳答案

问题是第一次调用 erase() 很可能会使另一个迭代器失效。看这个post快速总结在各种容器中无效的内容。我想说最简单的解决方案是首先遍历容器并标记要删除的条目但不删除它们,然后在第二次扫描中只删除所有标记的内容。出于第二次扫描的性能原因,您应该使用 std::remove_if 或使用反向迭代器。

关于c++ - vector 迭代器根据条件删除两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838498/

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