Я знаю, что следующий код неверен для 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#гарантирует, в котором, кажется, говорится, что я могу стереть без делает итератор недействительным. Однако я не уверен, что из-за того, что я удаляю элемент, другой элемент, который я должен посетить во время итерации, может быть перемещен перед текущей позицией итератора и никогда не будет посещен (другими словами, путем стирания некоторых элементов во время итерации, я все еще уверен, что пройду все элементы?).
Спасибо!