for (std::set<Color>::iterator i = myColorContainer.begin();
i!=myColorContainer.end(); /* No i++ */)
{
if ( *i == Yellow)
{
DoSomeProccessing( *i );
std::set<Color>::iterator tmp = i;
++i;
myColorContainer.erase(tmp);
}
else {
++i;
}
}
Как только вы переходите к следующему сообщению с ++i
, оно гарантированно будет действительным - свойство std::set
, что итераторы на вставленных элементах никогда не становятся недействительными, если элемент не удален.
Так что теперьВы можете безопасно стереть предыдущую запись.