This will cause a series of unpredictable bugs such as program memory overwrite.
Copy codeThe Code is as follows: map <string, string >:: iterator iter;
For (iter = mm. begin (); iter! = Mm. end (); iter ++)
{
If (iter-> second = something)
{
Mm. erase (iter );
}
}
Cause: When erase drops iter, it continues executing iter ++.
Correct method:Copy codeThe Code is as follows: for (iter = mm. begin (); iter! = Mm. end ();)
{
If (iter-> second = something)
{
Mm. erase (iter ++ );
}
Else
{
Iter ++; // Use Pre Increment for efficiency.
}
}
Some may not understand mm. erase (iter ++)
Actually, it is the same as this one.Copy codeThe Code is as follows: for (iter = mm. begin (); iter! = Mm. end ();)
{
If (iter-> second = something)
{
Map <string, string >:: iterator iter_erase;
Iter_erase = iter ++ // save and then delete ++
Mm. erase (iter_erase );
}
Else
{
Iter ++; // Use Pre Increment for efficiency.
}
}