先上代码块:
...
map<index, value> mapData;
...
for (map<index, value>::iterator i=mapData.begin(); i!=mapData.end(); i++)
{
if (i->first == xxx)
{
mapData.erase(i);
}
}
...
这是一个很常见的错误:i指针在元素被删除后失效了,回到for语句中与mapData.end() 进行比较将会发生错误。
下面给出一个正确的删除方法:
...
map<index, value> mapData;
...
for (map<index, value>::iterator i=mapData.begin(); i!=mapData.end(); i++)
{
if (i->first == xxx)
{
mapData.erase(i++);
}
else
{
i++;
}
}
....
另外,当map中的Value为指向堆区的指针时,在删除之前别忘了先要释放内存:
...
map<index, value> mapData;
...
for (map<index, value>::iterator i=mapData.begin(); i!=mapData.end(); i++)
{
if (i->first == xxx)
{
delete i->second;
i->second = NULL;
mapData.erase(i++);
}
else
{
i++;
}
}
对于这种情况,网上有人测试表示map在删除Value之后会在一段时间后内自动删除相关的内存。这里还没去试验,但是主动去释放肯定是没错的!
最后,文章若有不确切之处,欢迎指出!