C++ STL map 刪除一個元素 erase 操作
阿新 • • 發佈:2019-01-12
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