我正在尝试迭代std::list但是有一个问题 - 在迭代期间执行的操作可能最终添加或从列表中删除元素.在这种情况下,添加不是问题,但删除可能最终使列表中的任何迭代器无效,包括序列中的当前或下一项.
决定修改列表的点远离迭代循环 - 调试器在两者之间的调用堆栈中显示40个函数调用.因此,无法根据删除修改迭代器.
我唯一能想到的是在开始时复制列表并迭代它,测试每个元素以确保它仍然在主列表中.这是一个O(n ^ 2)命题,如果可能的话,我想避免.
小智 2
您有三个选择:
当迭代器失效时重新开始(并且可能跳过n迭代?[with continue])
编辑:就像 Pubby 所说,将删除的元素标记为过期,并且当您添加元素时使用跳过n迭代的东西:)
迭代器不允许通过索引访问,因此这使得为您的问题想出一个优雅的解决方案变得有点困难。
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |