Блог пользователя hacker696969

Автор hacker696969, история, 4 года назад, По-английски

Hello CF Community,

I am new to competitive programming and recently have been learning STL ,I wanted to ask that if i want to erase the smallest value and also keep on iterating, if I am writing the following code, I am getting garbage values.

I know that there are other ways to do this but I wanted a modification of my code ,and also I wanted to know that is it not possible to traverse set while simultaneously erasing elements.

Code
  • Проголосовать: нравится
  • -6
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

Your code isn't working because of it++. You are trying to increment an iterator to the erased element.

But it's possible to change your code:

set <int> s;
s.insert(1); s.insert(2); s.insert(3);
for(auto it = s.begin(); it != s.end();) {
    cout << *it << endl;
    it = s.erase(it);
}
  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится

    Note that this works because set::erase when called with an iterator conveniently returns the iterator to the next element.

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

This will work I guess.

Spoiler