[問題] 從STL的set中移除element

看板C_and_CPP作者 (啊我多久沒改暱稱了)時間11年前 (2012/10/29 13:57), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): 我對C++和STL不太熟,但我在試著用STL裡面的"set"時遇上一個delete的問題 在程式中,StateSet是一個 STL set,我會一直往裡面塞東西, 然後試圖把StateSet裡面「最後一個element」移除掉 我用一個iterator s_it指到set裡面最後一個element 再用StateSet.erase(s_it), 但我查了一下好像這個做法不會真的把s_it指到的memory free掉, 所以我試著用delete s_it來做,但一直沒法成功(compile error) 請問我的寫法是不是出錯了呢? 因為如果我不試著free掉s_it所指向的memory的話,記憶體一直爆炸 (因為我一直塞東西進StateSet並一直移掉最後一個element) 以下是我的程式片段 set <STATE, classcomp> StateSet; set <STATE, classcomp>::iterator s_it; ... //中間就一直塞東西進StateSet ... s_it=StateSet.end(); --s_it; //指到StateSet中最後一個element的iterator StateSet.erase(s_it); //把 s_it指到的element(set 中最後一個 //element)移除掉 delete s_it; //問題所在:free memory ->這邊會 // compile error,但不free掉memory 的話記憶體又爆炸 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.235.93.31

10/29 13:59, , 1F
STATE是個指標的話就delete *s_it
10/29 13:59, 1F

10/29 14:15, , 2F
最後一個不是end() 那是最後一個的下一個
10/29 14:15, 2F

10/29 14:16, , 3F
改用rbegin()
10/29 14:16, 3F

10/29 14:16, , 4F
啊 看錯沒事
10/29 14:16, 4F

10/29 17:25, , 5F
原PO的作法還是很危險的 要是set裡一個都沒有就挫賽了
10/29 17:25, 5F

11/02 01:31, , 6F
沒有錯啊 end () 並不是最後一個阿
11/02 01:31, 6F
文章代碼(AID): #1GZXhMSv (C_and_CPP)