Wednesday, May 6, 2009

Delete item in vector iterator loop

Most common mistake we face during we want to remove an iterator in vector loop is


for(iter = list.begin(); iter != list.end();++iter)
{
if(match(*iter))
{
list.erase(iter);
}
}


The correct way should be



for(iter = list.begin(); iter != list.end();)
{
if(match(*iter))
{
iter = list.erase(iter);
}
else
{
++iter;
}
}
or
list.erase(std::remove_if(list.begin(),
list.end(), match))

No comments: