【发布时间】:2010-01-27 19:00:48
【问题描述】:
我想知道这样的东西是否安全......
// Iterating through a <list>
while ( iter != seq.end()) {
if ( test ) {
iter = seq.erase( iter );
} else {
++iter;
}
我知道以这种方式遍历向量会使迭代器无效,但同样的事情会发生在列表中吗?我认为不是因为列表是通过指针顺序排列的,而不是在内存中彼此“相邻”,但任何保证都会有所帮助。
【问题讨论】:
-
注意:这对std::vector也是有效的,所有存在于vector中的迭代器都会失效,但是
erase方法返回的迭代器是一个有效的迭代器。 -
是的,但是安全我的意思是继续对容器进行操作会很好,因为其他迭代器不会失效(在这种情况下,除了一个被擦除的迭代器)。
-
如果你有 other 迭代器,你最好确保它们不可能指向刚刚被删除的元素...