在 C 中,内置的 std::list 类是双向链表,提供高效的元素插入和删除。然而,当尝试在迭代期间修改列表时,谨慎执行操作至关重要。
问题:迭代检查 std: 中项目的活动状态时发生错误:列出并尝试立即删除不活动的项目。删除元素后尝试移动迭代器时遇到错误“列表迭代器不可递增”。
解决方案:在迭代过程中成功删除元素的关键是将修改应用于迭代器首先,在执行删除之前。与其尝试递增迭代器然后删除元素,不如将循环重构为 while 循环,从而允许迭代器在循环本身内递增。因此,下面更新的代码演示了正确的方法:
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { i = items.erase(i); // alternatively, i = items.erase(i++); } else { other_code_involving(*i); ++i; } }
此修改后的代码可确保迭代器在执行元素删除之前正确递增,从而避免错误并在迭代时有效删除不活动元素列表。
以上是如何在迭代时安全地从 `std::list` 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!