我知道以下代码不正确,对于std :: vectors,更常见的是所有STL容器:
std::vector<something>::iterator it = array.begin();
for(; it != array.end(); it++) {
...
array.erase(it);
...
}
因为在擦除和元素之后需要更新迭代器 .
我想知道升压多指数是否相同,例如以下内容是否正确:
my_index::iterator it = index.get<0>().begin();
for(; it != index.get<0>().end(); it++) {
...
index.erase(it);
...
}
我想确保理解文档的以下段落:http://www.boost.org/doc/libs/1_51_0/libs/multi_index/doc/tutorial/indices.html#guarantees这似乎表明我可以擦除而不会使迭代器失效 . 但是我的位置永远不会被访问(换句话说,通过在迭代期间擦除一些元素,我仍然可以通过所有元素吗?) .
谢谢!
2 回答
您链接的段落仅适用于散列(无序)索引 . 它声明在插入新元素时,散列索引迭代器仍然有效 .
擦除时,对于有序索引,您始终可以使用
erase
的返回值保证完整迭代:这也适用于散列(无序)索引,因为迭代顺序在擦除元素上是稳定的 .
不,您的操作在提升索引中无效 . 从集合中删除的迭代器永远不会保持有效,如果您将它们存储在某个地方,那么集合中的其他迭代器仍然有效 .
实际文本是: