Почему вставка делает недействительным обратный итератор std :: set
Насколько я понимаю, итераторы ассоциативных контейнеров не становятся недействительными во время вставки или удаления (если только не удален узел, указанный итератором). Но в приведенной ниже программе вставка, кажется, делает недействительным итератор. Мое понимание неверно?
typedef std::set myset_t;
int main(int argc, char **argv)
{
myset_t rs;
myset_t::reverse_iterator rit;
myset_t::reverse_iterator srit;
int ii = 500;
rs.insert(10);
rs.insert(11);
rs.insert(12);
rs.insert(13);
rs.insert(14);
rs.insert(100000);
rs.insert(102000);
rs.insert(103000);
rit = rs.rbegin();
while(rit != rs.rend()) {
srit = rit;
if (*rit < 100000) {
cout < "bailing here " < *rit < endl;
return 0;
}
rit++;
cout < "Before erase " < *rit < endl;
rs.erase(*srit);
cout < "Before insert " < *rit < endl;
rs.insert(ii);
cout < "After insert " < *rit < endl;
ii++;
}
cout < "Out of loop" < endl;
}
===
The output is
Before erase 102000
Before insert 102000
After insert 14
bailing here 14
=====