我知道以下代码不正确,对于 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 这似乎说明了我可以在不使迭代器无效的情况下擦除。但是我不确定是否因为我删除了一个元素,我应该在迭代期间访问的另一个元素可以移动到当前迭代器的位置之前并且永远不会被访问(换句话说,通过在迭代期间擦除一些元素,我仍然确定要遍历所有元素吗?)。
谢谢!