Search code examples
c++setstdset

how to remove all even integers from set<int> in c++


I'm new to C++. I'd like to know how experienced coders do this.

what I have:

set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(4);
s.insert(5);

for(set<int>::iterator itr = s.begin(); itr != s.end(); ++itr){
if (!(*itr % 2))
    s.erase(itr);
}

and of course, it doesn't work. because itr is incremented after it is erased. does it mean Itr has to point to the begin of the set everytime after i erase the element from the set?


Solution

  •  for(set<int>::iterator itr = s.begin(); itr != s.end(); ){
      if (!(*itr % 2))
          s.erase(itr++);
    
      else ++itr;
     }
    

    effective STL by Scott Myers