STL

Erasing elements in a loop

Map

Erasing an element does not invalidate other iterators.

  bool erase_i;
  for(std::map<int,int>::iterator i = myMap.begin(); i != myMap.end(); erase_i ? myMap.erase(i++) : ++i)
  {
    erase_i = false;
    ...
    if (want_erase) erase_i = true;
    ...
  }

Vector, List

Erasing an element do invalidate other iterators.

  bool erase_i;
  for(std::vector<int>::iterator i = myVec.begin(); i != myVec.end(); erase_i ? i = myVec.erase(i) : ++i)
  {
    erase_i = false;
    ...
    if (want_erase) erase_i = true;
    ...
  }
programming/stl.txt · Last modified: 2013/09/19 16:41 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0