gpt4 book ai didi

c++ - 不应该像这样从 STL::list 中删除进入无限循环吗?

转载 作者:行者123 更新时间:2023-11-30 01:19:16 25 4
gpt4 key购买 nike

这段代码不应该进入无限循环吗?

    list<int>val;
val.push_back(0);
list<int>::iterator iter,iterEnd;
iter = val.begin();
int i;
for (; iter != val.end(); )
{
i = *iter;
if(i==0)
{
val.erase(iter++);
}
else iter++;
}

既然删除后只有一个值,然后自增迭代器,那么迭代器不应该超过值val.end()然后陷入死循环吗?但是当我运行它时,它运行得很好!谁能解释一下?谢谢。

最佳答案

在您的示例中,iter 实际上在 std::list::erase 调用和

之前递增

References and iterators to the erased elements are invalidated. Other references and iterators are not affected.(cppreference)

所以当删除发生时,iter 已经指向下一个有效元素。

等同于lst.erase(iter++);的伪代码:

temp = iter
iter += 1
lst.erase(temp)

关于c++ - 不应该像这样从 STL::list 中删除进入无限循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112382/

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