C++ STL map 删除一个元素 erase 操作

               
 std::map<int,int>::iterator iter=m_intmap.begin(); for (iter;iter!=m_intmap.end();) {  if (iter->first==1)  {   m_cintmap.erase(iter++);  }  else  {   iter++;  } }


为什么不是

m_cintmap.erase(iter);

如果我们用了上面的语句,会这样:

在map中把iter指向的内存删除了。

然后循环用iter与m_intmap.end()比较,这里就出问题了,iter指向的内存已经删了……于是程序崩溃


主要问题在于

erase() 函数将 iter 指向的地址删除后,不会主动更改iter指向下一个地址。于是我们要手动设置 iter 指向下一个地址。


iter++

自加操作,将iter指向下一个地址并且返回 iter 原来的副本,这样

erase 操作删掉了 iter 原来指向的地址,并且 iter 已经成功指向了下一个元素


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43667944/article/details/86162125