c++ - Valid or Invalid Iterators And Iterator Positions -
i have simple example routine below erasing vector elements, positions of stored in vector. i've been using method time , have experienced error: expression: vector iterator + offset out of range.
i seem have found problem, being within parameters of erase() call wasn't enclosing 2nd part in parenthesis, resulted in above error when erasing elements near end of vector.
now i've identified , corrected problem, grateful if confirm simple routine below in fact valid , without error, , call erase() within for-loop in way okay.
i realise routine works if erasing element positions in order of first last. please see code below:
vector<int> mynumbers; mynumbers.push_back(4); mynumbers.push_back(5); mynumbers.push_back(6); mynumbers.push_back(7); vector<int> delpositions; delpositions.push_back(1); delpositions.push_back(2); delpositions.push_back(3); for(unsigned int = 0; < delpositions.size(); ++i) mynumbers.erase(mynumbers.begin() + (delpositions[i] - i)); // used be: delpositions[i] - caused error! instead of: (delpositions[i] - i)
you right thing adjusting 'delposition' number of elements erased. ensure 'delpositions' sorted ascending.
erasing in reverse order (last first) might bit more efficient.
i consider
vector result; result.reserve(mynumbers.size() - delpositions.size()); // copy valid positions result mynumbers.swap(result) a better solution
Comments
Post a Comment