关于容器Map删除元素的常见问题

来源:互联网 发布:网络传输技术种类 编辑:程序博客网 时间:2024/05/22 21:41

先上代码块:

for (map<index, value>::iterator i=mapData.begin();  i!=mapData.end(); i++)   {      if (i->first == xxx)      {          mapData.erase(i);      }   }  
这是一个很常见的错误:i指针在元素被删除后失效了,回到for语句中与mapData.end() 进行比较将会发生错误。 
下面给出一个正确的删除方法:
for (map<index, value>::iterator i=mapData.begin();  i!=mapData.end())   {      if (i->first == xxx)      {          mapData.erase(i++);      }      else      {          i++;      }   }  

另外,当map中的Value为指向堆区的指针时,在删除之前别忘了先要释放内存:

for (map<index, value>::iterator i=mapData.begin();  i!=mapData.end())   {      if (i->first == xxx)      {          delete i->second;        i->second  = NULL;        mapData.erase(i++);      }      else      {          i++;      }   }  



0 0
原创粉丝点击