i want loop through vector , remove item each time.  believe should use erase-remove idiom.  believe erase on vector invalidates of iterators.  if that's case, how can use idiom in while loop?
here's broken example:
std::vector<int> vec = { 3, 6, 7, 5 };  auto itr = vec.begin(); while (itr != vec.end()) {     // i'll remove different element each iteration of loop.     // hard-coded "7" here simplicity:     auto position = std::remove(vec.begin(), vec.end(), 7);      vec.erase(position);     ++itr; } the purpose of code loop through vector , remove element each time.  use while loop , iterator because size of vector changes after each iteration.  i'll remove largest element each iteration, i'm not showing code keep simpler.  so, elements removed in order: 7, 6, 5, 3.  again, code isn't shown.
std::remove() moves elements (not 1 element!) of specified value end of container, , returns new logical past-end iterator. std::remove() not invalidate iterators, items not physically removed , container size not changed.  values inside container moved around.
after have "removed" want remove, call erase() 1 time @ end physically remove items container.
try this:
std::vector<int> vec = { 3, 6, 7, 5 };  auto itr = vec.begin(); auto end = vec.end();  while (itr != end) {     end = std::remove(vec.begin(), end, ...);     ++itr; }  vec.erase(end, vec.end()); 
Comments
Post a Comment