考虑以下:
for (it = list.begin(); it != list.end(); ++it) {
if (!(*it)->alive) {
it = list.erase(it);
}
}
Run Code Online (Sandbox Code Playgroud)
这个工作正常list.size() > 1.一旦列表只包含一个元素,则调用erase segfaults.我假设因为没有下一个元素.至少,这是我观察到的行为.有没有正确的方法来处理这个?也许是完全不同的方法?
如您所见,我不想立即清除列表.我想在它们死亡时删除元素,这样可以正常工作,直到它删除最后一个元素.
Eva*_*ran 10
以下将正常工作:
for (it = list.begin(); it != list.end(); ) {
if (!(*it)->alive) {
it = list.erase(it);
} else {
++it;
}
}
Run Code Online (Sandbox Code Playgroud)
问题不仅在于某些尺寸.在您的示例中,每次删除元素时都会跳过元素.想一想.
如果元素不是"活着",那么你执行:it = list.erase(it);,删除元素并设置it为跟随它的元素.然后你的循环执行++it,跳过下一个,可能跳过end()!
这不仅仅是跳过的问题end(),你也在跳过其他人,但删除列表中的最后一个元素可能会导致崩溃.
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |