Re[2]: : вопрос про stl, vector::erase
От: Bell Россия  
Дата: 17.01.05 09:50
Оценка:
Здравствуйте, BacCM, Вы писали:

BCM>Должно работать:

BCM>
BCM>table_iter_t it = table.begin();
BCM>while(it!=table.end){
BCM>  ...
BCM>  if (cond)
BCM>  {
BCM>        table.erase(it);
BCM>        //Значение итератора остается старым, но указывает на следующий элемент вектора
BCM>        continue;
BCM>    }
BCM>    ++it;
BCM>    ...
BCM>}
BCM>


Нет, не должно. После вызова erase итератор становится невалидным, и все дальнейшие операции с ним ведут к UB.
Однако в случае, когда итератор вектора — обычный указатель, то этот код будет работать, причем правильно. Но если поменяется реализация STL, и в этой реализации вектор будет иметь "полноценные" итераторы, то сюрпризы обеспечены.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.