Why for(auto x:st)st.erase(st.find(x)); and for( it=st.begin();it!=st.end();it++)st.erase(it); causes runtime error??
Why for(auto x:st)st.erase(st.find(x)); and for( it=st.begin();it!=st.end();it++)st.erase(it); causes runtime error??
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | turmax | 3559 |
| 6 | tourist | 3541 |
| 7 | strapple | 3515 |
| 8 | ksun48 | 3461 |
| 9 | dXqwq | 3436 |
| 10 | Otomachi_Una | 3413 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | adamant | 153 |
| 3 | Um_nik | 147 |
| 3 | Proof_by_QED | 147 |
| 5 | Dominater069 | 145 |
| 6 | errorgorn | 141 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | TheScrasse | 134 |
| 10 | chromate00 | 133 |
| Название |
|---|



Auto comment: topic has been updated by RED_in_Three_Months (previous revision, new revision, compare).
Don't know about the first example. But for the second one, once you delete using the iterator
it, the element gets deleted as well as all iterators pointing to that element. Thusitgets invalidated.There's an easy workaround.
set.erase(it)returns an iterator pointing to the element next to*it. So, you could just doit = set.erase(it).This issue has been nicely discussed here: https://mirror.codeforces.com/blog/entry/55393