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

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -