gpt4 book ai didi

c++ 在遍历所有迭代器时删除 std::vector.end()

转载 作者:太空狗 更新时间:2023-10-29 23:53:35 25 4
gpt4 key购买 nike

我想从 vector 中删除一些迭代器,所以这就是我现在拥有的。

void function(std::vector <class*> & vector)
{
std::vector <class*>::iterator it;
for(it = vector.begin(); iter != vector.end(); ++iter)
{
if(it->value == 1)
vector.erase(it);
}
Display(vector);
return;
}

显然,当被删除的迭代器是 vector 中的最后一个时,这段代码会给我一个错误,否则它似乎工作正常。我知道在这样的循环中修改 vector 可能不是理想的行为,但如果我必须这样做,最好的方法是什么?

谢谢。

最佳答案

for (it = vector.begin(); it != vector.end(); )
{
if (it->value == 1)
it = vector.erase(it);
else
++it;
}

但对于这种情况,您实际上应该只使用带有适当谓词的 std::remove_if

关于c++ 在遍历所有迭代器时删除 std::vector.end(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216039/

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