1. 程式人生 > >C++ STL map 刪除一個元素 erase 操作

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