std::map<int, int> mapTest;
mapTest.insert(std::make_pair(1, 1));
mapTest.insert(std::make_pair(2, 2));
mapTest.insert(std::make_pair(3, 3));
mapTest.insert(std::make_pair(4, 4));
mapTest.insert(std::make_pair(5, 5));
// Wrong! to erase the last iter
std::map<int, int>::iterator iter = mapTest.begin();
for(; iter != mapTest.end(); ++iter)
{
int key = iter->first;
printf("%d\t", key);
if(key == 5)
{
mapTest.erase(iter);
}
}
// Wrong:
std::map<int, int>::iterator iter = mapTest.begin();
for(; iter != mapTest.end(); )
{
int key = iter->first;
printf("%d\t", key);
if(key == 5)
{
std::map<int, int>::iterator iterTmp = iter;
mapTest.erase(iterTmp);
++iter;
continue;
}
++iter;
}
// Correct:
std::map<int, int>::iterator iter = mapTest.begin();
for(; iter != mapTest.end(); )
{
int key = iter->first;
printf("%d\t", key);
if(key == 5)
{
std::map<int, int>::iterator iterTmp = iter;
++iter;
mapTest.erase(iterTmp);
continue;
}
++iter;
}
// Correct
std::map<int, int>::iterator iter = mapTest.begin();
for(; iter != mapTest.end(); )
{
int key = iter->first;
printf("%d\t", key);
if(key == 5)
{
mapTest.erase(iter++);
continue;
}
++iter;
}
std::map<int, int>::iterator iter = mapTest.begin();
for(; iter != mapTest.end(); )
{
int key = iter->first;
printf("%d\t", key);
if(key == 5)
{
iter = mapTest.erase(iter);
continue;
}
++iter;
}