STL删除元素注意事项
一、vector、list
正确版本:
for(auto iter = a.begin(); iter != a.end(); )
{
if(*iter > 30)
{
iter = a.erase(iter);
}
else
{
iter++;
}
}
错误版本:
for(auto iter = a.begin(); iter != a.end(); ++iter)
{
if(*iter > 30)
{
a.erase(iter);
}
}
二、map
删除map的元素,不能是 map[key]=NULL
这种做法没有删除<key,value>对,而改成了<key,NULL>
只能是
iterator it=map.find(key);
if(it!=map.end())
map.erase(it);
遍历删除问题:
正确版本:
for(;iter!=mapStudent.end();)
{
if((iter->second)>=aa)
{
//满足删除条件,删除当前结点,并指向下面一个结点
mapStudent.erase(iter++);
}
else
{
//条件不满足,指向下面一个结点
iter++;
}
}
错误版本:
for(map<string, string>::iterator i = mapData.begin(); i != mapData.end(); ++i)
{
if(i->first == "b")
{
mapData.erase(i);
}
}