作者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