C std::List 中的迭代元素移除
在 C 中,std::list 是一个提供双向链表数据的容器结构。迭代列表时,可能需要根据特定条件删除元素。当直接在迭代循环中删除项目导致“列表迭代器不可递增”错误时,就会出现此问题。
要解决此问题,必须在删除前一个元素之前先递增迭代器 (i )。这可以通过使用 while 循环来实现,如下所示:
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { items.erase(i++); // alternatively, i = items.erase(i); } else { other_code_involving(*i); ++i; } }
在这个修改后的代码中,迭代器 i 在循环内递增,允许 items.erase(i ) 操作成功删除前一个元素。或者,可以将 i 替换为 i = items.erase(i) 以获得相同的效果。
通过实施这种方法,可以在满足所需条件后立即有效地删除项目,从而无需额外的传递通过列表。
以上是如何在迭代时安全地从 C std::list 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!