作者WSzc (WSzc)
看板EE_DSnP
標題[問題] dlist的deleteRandom()
時間Sun May 17 17:32:03 2009
請問一下
在adtTest.h中有deleteRandom這個function 用來做 adtd -r xxx這件事
void deleteRandom(size_t repeat = 1) {
size_t s = _container.size();
for (size_t i = 0; i < repeat; ++i) {
size_t pos = rnGen(s);
if (_container.erase(getPos(pos))) --s;
}
}
但是我在跑的時候一直會掛掉
後來cout測了一下
repeat應該就是我要random delete的次數
而s是我現在list中的element個數
可是如果s比repeat小的話 (list中的element個數比要delete的個數少)
因為一直做--s 所以當s撿到變成0後 再減一次會變成一個超大的數字
也造成我pos會變成超大的數字(pos = rnGen(s)) 然後程式就停在那邊了
應該是因為這個pos根本不知道是什麼的關係
所以在dlist.h中的erase(iterator pos)就沒辦法做下去
請問該怎麼處理repeat次數比s要大的情況呢 謝謝!!
(--s應該是為了要每次都產生不同的random number seed吧?)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.50.247
※ 編輯: WSzc 來自: 118.161.50.247 (05/17 18:53)
1F:→ WSzc:喔是我erase時 沒有特別處理node是_head的情況 解決了 05/17 18:54