看板 EE_DSnP 關於我們 聯絡資訊
剛突然檢查到一個問題 list中 erase物件的話,我應該要把那個node上面的物件真的delete掉吧 不是只把point改一改而已 所以當我做 DList<AdtTestObj>::iterator itr; itr = _container.begin(); ... 之後如果我有erase到_container的第一個物件 _container的_head位置就會改變,且原本的位置上的東西被delete 那itr 基本上除非重新定義一次itr = _container.begin(); //把itr指到新的起始位置 不然他就會變成指到空的地方(begin的內容被delete了) 之後要是又去使用itr的資料就會crash了 但這一樣來 在跑for (itr = _container.begin(); itr != _container.end() ;itr++){...} 就變成不那麼直觀了 因為這中間不能去erase到開頭的物件,很奇怪... --- 照vector的邏輯 我如果 itr = _container.begin() _container.erase(itr); 那這時itr就會自動跑到新的begin()去了 也就是他偷偷多做了itr = _container.begin()這件事情 這樣來說 我的erase(iterator pos) 應該要改成 erase(iterator &pos) 才能在erase這個指令中去動到itr的位置吧 至於erase(T &x) vector似乎沒支援這種用法,所以也不太清楚要做成什麼樣子比較好orz --- 問題有點混亂qq... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.228.22 ※ 編輯: BBSealion 來自: 218.168.228.22 (12/07 23:39)
timrau:STL的玩法是讓return value為"指向parameter的後一個元素" 12/07 23:41
※ 編輯: BBSealion 來自: 218.168.228.22 (12/07 23:41)
timrau:所以itr = _container.erase(itr); 就行了 12/07 23:42
BBSealion:? erase的return是bool耶 12/07 23:47
BBSealion:喔喔 你是說STL的做法 其實他不用耶 他ERASE就自動完成 12/07 23:48
BBSealion:可以省略 itr = 這個步驟 12/07 23:50