Re[3]: И снова STL на разных платформах
От: Bell Россия  
Дата: 11.09.06 06:48
Оценка:
Здравствуйте, Pavel515, Вы писали:

P>почему тогда конструкция типа

P>for(k=Keys.begin();k!=Keys.end();k++)
P>{
P>...
P>   if(...)
P>   {
P>      Keys.erase(k);
P>      continue;
P>   }
P>}

P>дает исключение при первом удалении, а

После инструкции Keys.erase(k); итератор k становится недействительным, и в конце тела цикла for инкремент выполняется на этом недействительном итераторе.

P>..., а

P>k=Keys.begin();
P>while(k!=Keys.end())
P>{
P>...
P>if(...)
P>{
P>Keys.erase(k++);
P>continue;
P>}
P>k++;
P>}


P>Нет! ?


Keys.erase(k++); в данном случае все в порядке, т.к. используется постфиксная форма operator ++, и в erase уходит копия значения итератора, а у нас остается валидный инкрементированный итератор.

P>неужели все как-то держится на "гонке сигналов" ???

Конечно нет.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.