C++中關於set刪除的一些坑。本站提示廣大學習愛好者:(C++中關於set刪除的一些坑)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中關於set刪除的一些坑正文
前言
最近任務中需求運用均衡樹維護操作。遂調用了C++規范庫裡的set,在確保解題思緒沒有出錯的狀況下,我發現自己一直有一組樣例無法經過。在反省了很久的細節並找了標程對跑兩頭進程當前,我發現我在運用set做刪除的時分,迭代器發作了和我料想不一樣的變化。
我在一個函數中調用了set的erase操作來刪除某個迭代器,函數的傳入參數為要刪除的迭代器,相似如下
set<int> aha; void del(set<int>::iterator it) { //一頓操作 aha.erase(it); }
然後我在main中想要刪除一個迭代器,並左移一位或右移一位迭代器,相似如下
int main() { set<int>::iterator now; //一頓操作 //操作1 now=aha.find(5); del(now); now--; //操作2 now=aha.find(8); del(now); now++; }
下面是我原來的寫法,刪除這個迭代器所在的地位,然後移位。
但理想很美妙,理想有差距。在我用標程對拍當前,我發現上述操作存在很大問題。
運用erase操作刪除一個迭代器當前,我訪問該迭代器,他依舊是原來的值。
但當我想要左右移位時,經測試發現不論你左移還是右移,他前往的都是刪除的迭代器在原set中的前一個地位。
也即
set<int>::iterator now=aha.find(8); del(now); /* 如今--now和++now都是同一個地位 為未刪除now的set中,now的前一個地位 */
理解這個就好辦了,我事後存下我要刪除的地位,然後迭代器先更新,再調用刪除即可。
這個次要還是對STL不夠熟習形成的,為此,我後來還去翻閱了set中erase操作的函數原型及前往值。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或許任務能帶來一定的協助,假如有疑問大家可以留言交流。