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イテレータを無効にすることなく消去できます。ただし、要素を削除したため、反復中にアクセスすることになっている別の要素が現在の反復子の位置の前に移動され、アクセスされない可能性があるかどうかはわかりません (つまり、反復中にいくつかの要素を消去することにより、私はまだすべての要素を通過することを確信していますか?)。
ありがとう!