作者starsky7372 (點點星空照上風)
看板EE_DSnP
標題[問題] dlist 的 erase()
時間Mon Dec 5 02:30:57 2005
剛剛測試 dlistTest1.cpp
用的是 STL 裡的 <list>
發現下面這段 code
for (li = ll.begin(); li != ll.end(); ++li)
if (*li % 3 == 0)
li = ll.erase(li);
如果改成這樣
for (li = ll.begin(); li != ll.end(); ++li) {
if (*li % 3 == 0) {
cout << "erase " << *li << endl;
li = ll.erase(li);
} else
cout << *li << endl;
}
會輸出下面這一段
-40
-22
erase -6
20
erase 30
44
erase 48
erase 51
59
erase 66
86
erase 99
131
erase 150
-40
-22
8
20
38
44
50
erase 54
erase 75
erase 114
覺得怪怪的,
為什麼 delete 完 tail 後回傳的 iterator 再 ++ 會變回 head?
如果照 pdf 的寫法,我們 delete 完應該回傳那個 node 的下一個 node
所以 delete 掉 tail 是不是應該回傳 0?
那麼 0 再 ++ 應該會出問題才對 ><"
所以是我有那邊搞錯了嗎?
感謝指正
---
PS: 教授早點睡喔 ^^
--
. * ‧ . .
.點點星空照上風~
.
* . . ﹢ ·
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.251.56
※ 編輯: starsky7372 來自: 140.112.251.56 (12/05 02:31)
推 ric2k1:是很奇怪, 為什麼會 "erase 150"? 150 % 3 != 0 呀?? 12/05 09:20
→ ric2k1:我好像也會遇到這種情況, 我會進去 debug 看看... 12/05 09:22
→ ric2k1:Oh... 我錯了 150%3 = 0... 我在看看... (但要去開會了...) 12/05 09:23