re: 安全的list[未登錄](méi) PeakGao 2008-11-20 13:35
@Jeff Chen
你這種其實(shí)就是我上面說(shuō)的這個(gè)意思:“再有一種辦法,就是對(duì)象要移除時(shí),只設(shè)置一個(gè)需要移除的標(biāo)志,在下一輪遍歷前才真正移除?!?,不過(guò)你的說(shuō)法好像有問(wèn)題哦,遍歷時(shí)根本不知道是無(wú)效的Connection哦,而且不能在遍歷的過(guò)程中將節(jié)點(diǎn)移入到另一個(gè)列表,這樣會(huì)掛的
re: 安全的list[未登錄](méi) PeakGao 2008-11-18 08:58
@不懂
理論上是這樣,框架徹底的好就沒(méi)有問(wèn)題,但是在游戲更新時(shí),經(jīng)常有生命期結(jié)束的對(duì)象,這樣的對(duì)象需要從地圖上面移除,就涉及到從列表中erase,而生命期結(jié)束是根據(jù)update的調(diào)用進(jìn)行檢測(cè)的。當(dāng)然可以有另一個(gè)辦法,就是將檢測(cè)放到一個(gè)時(shí)鐘里面,而不是在list的遍歷過(guò)程中,但是這樣會(huì)需要好多多余的時(shí)鐘。再有一種辦法,就是對(duì)象要移除時(shí),只設(shè)置一個(gè)需要移除的標(biāo)志,在下一輪遍歷前才真正移除。發(fā)現(xiàn)越說(shuō)越復(fù)雜了,總之,這個(gè)功能就是用于list遍歷很復(fù)雜時(shí),也能安全的工作。你的這幾行,參考我上面的,就一句it=list.erase(it)迭代器不需要臨時(shí)保存的?。?
for (std::list<int>::iterator it=list.begin(); it!=list.end();)
{
if (條件為真)
{
itTmp = it; // 多余
++itTmp; // 多余
it = list.erase(it); // 刪除當(dāng)前節(jié)點(diǎn)
it = itTmp; // 多余
}
else
++it;
}
re: 安全的list[未登錄](méi) PeakGao 2008-11-17 10:30
@是什么
是這樣的,當(dāng)list的操作很簡(jiǎn)單時(shí),遍歷list幾乎沒(méi)有什么問(wèn)題,也可以在遍歷的時(shí)候刪除當(dāng)前節(jié)點(diǎn),如:
for (std::list<int>::iterator it=list.begin(); it!=list.end();)
{
if (條件為真)
it = list.erase(it); // 刪除當(dāng)前節(jié)點(diǎn)
else
++it;
}
但是當(dāng)這個(gè)list不是很簡(jiǎn)單的遍歷時(shí),而且刪除的時(shí)候也不是很顯式的在遍歷過(guò)程中時(shí),就很容易出問(wèn)題,如:
void MapManager::update(...)
{
// typedef std::list<Entity*> DisplayList;
for (DisplayList::iterator it=mDisplayList.begin(); it!=mDisplayList.end();)
{
(*it)->update(...);
}
}
但是(*it)->update(...);會(huì)調(diào)用到另一個(gè)模塊中去了,可能會(huì)這樣調(diào)用:
void Entity::update(...)
{
//...
MapManager->removeEntity(this);
}
而removeEntity會(huì)涉及到erase節(jié)點(diǎn):
void MapManager::removeEntity(Entity* e)
{
mDisplayList.remove(e);
}
如果Entity的update方法中,發(fā)現(xiàn)自己的生命期已經(jīng)結(jié)束的話(huà),就會(huì)刪除自己,這樣MapManager::update里面就非法了,這是一個(gè)站在磚頭上拿掉磚頭的問(wèn)題,必定非法。這個(gè)safelist就是為了支持在遍歷列表的過(guò)程中能安全的erase任何節(jié)點(diǎn)。
可能你們沒(méi)有碰到該類(lèi)問(wèn)題,或者使用list的時(shí)候沒(méi)有那么復(fù)雜,所以一時(shí)沒(méi)法去了解。
re: 一個(gè)小的搜索引擎 PeakGao 2007-11-10 19:56
發(fā)郵件給你了,但是發(fā)現(xiàn)好像掉了幾個(gè)問(wèn)題,呵呵
re: 一個(gè)小的搜索引擎 PeakGao 2007-11-10 19:27
加我QQ吧,交個(gè)朋友
re: 一個(gè)小的搜索引擎 PeakGao 2007-11-10 19:24
re: 一個(gè)小的搜索引擎 PeakGao 2007-11-10 19:16
@<a href=
http://minidx.com>minidxer</a>
發(fā)現(xiàn)你發(fā)帖好快啊,我還沒(méi)有編輯好,你的回復(fù)就來(lái)了,看你首頁(yè)才發(fā)現(xiàn)你搞全文檢索的,呵呵
re: 有意轉(zhuǎn)讓一個(gè)搜索引擎 PeakGao 2007-11-10 17:37
@<a href=
http://minidx.com>minidxer</a>
原來(lái)寫(xiě)了一個(gè)php的搜索功能,但是后來(lái)改了程序,就沒(méi)有繼續(xù)改,就寫(xiě)了個(gè)COM,c++熟悉多了,php不是我的強(qiáng)項(xiàng)
re: 有意轉(zhuǎn)讓一個(gè)搜索引擎 PeakGao 2007-11-10 17:35
@<a href=
http://minidx.com>minidxer</a>
分詞只有那么幾種有效的算法,呵呵,我也沒(méi)有時(shí)間去研究一種新的算法,只是為了速度做了改進(jìn)而已。
沒(méi)有search.php你還想直接運(yùn)行exe啊,哈哈,連search.php都只是一個(gè)殼,內(nèi)部調(diào)用的COM組件
@Minidx全文檢索
我最后是自己解析的html,這里提供一組測(cè)試數(shù)據(jù)供參考:
三個(gè)URL提取器的性能比較,均連續(xù)進(jìn)行3次,
測(cè)試新華網(wǎng)主頁(yè)的url提取: parse www.xinhuanet.com
提取器名稱(chēng) url數(shù)目 耗時(shí)(連續(xù)3組)
正則表達(dá)式(RegexUrlProber) 854 767/561/598 ms
微軟DOM(MsDomUrlProber) 952 1132/629/605 ms
我們的(MyDomUrlProber) 952 16/18/15 ms
從數(shù)據(jù)看,我自己寫(xiě)的html解析程序速度是相當(dāng)不錯(cuò)的 :)
re: 有意轉(zhuǎn)讓一個(gè)搜索引擎 PeakGao 2007-11-10 13:24
@<a href=
http://minidx.com>minidxer</a>
雖然分詞沒(méi)有海量的準(zhǔn),但是速度比它聲明的還快,經(jīng)測(cè)試1581 bytes/ms,相當(dāng)于 4743萬(wàn)個(gè)漢字/分鐘,比海量的 2000萬(wàn)字/分鐘 還快,呵呵,只是精度沒(méi)他的高,我的機(jī)器配置并不高:AMD Athlon 2500+,512M DDR內(nèi)存
re: 有意轉(zhuǎn)讓一個(gè)搜索引擎 PeakGao 2007-11-10 13:12
@萬(wàn)連文
如果沒(méi)有用起來(lái),估計(jì)有可能發(fā)布源代碼,但是沒(méi)有時(shí)間表
@Minidx全文檢索
執(zhí)行效率不錯(cuò),當(dāng)然比你用純API寫(xiě)的差,畢竟為了框架的合理和跨平臺(tái)封裝,導(dǎo)致了不少的函數(shù)調(diào)用開(kāi)銷(xiāo),但這些對(duì)于應(yīng)用來(lái)講可以忽略,除非你用在某些實(shí)時(shí)行特別高的地方
re: 終于拿到駕駛證了[未登錄](méi) PeakGao 2007-09-22 12:16
@LOGOLS_
這跟源代碼管理是2回事,我沒(méi)有說(shuō)用這種方法代替源代碼管理,源代碼管理我用過(guò)vss,cvs和svn,但他們都會(huì)產(chǎn)生垃圾文件,當(dāng)你拷貝代碼時(shí),總是不好去掉這些垃圾文件,所以rar打包是一種干凈的備份
@flyingxu
放解決方案文件.sln所在目錄即可
沒(méi)反應(yīng)的話(huà),看看你的rar.exe所在目錄設(shè)置是否正確
@Starling
asp.net不是很清楚,可能是類(lèi)似下面的語(yǔ)法:
// testAjax.aspx
<%
Response.Charset("GB2312");
Response.Write('This is a test for mootools.Ajax,中文信息沒(méi)有亂碼');
%>
具體語(yǔ)法不記得了,以前稍稍學(xué)過(guò)asp.net,但是沒(méi)有用來(lái)應(yīng)用,網(wǎng)上有很多這方面的帖子。
re: HTML-加速、再加速 PeakGao 2007-04-05 11:52
@夢(mèng)在天涯
搞游戲開(kāi)發(fā)搞了6年,NND,可是沒(méi)有作總結(jié),博客開(kāi)的也遲,比較懶,最近在學(xué)php,想在互聯(lián)網(wǎng)方面拓展一下知識(shí),呵呵,現(xiàn)在稍稍勤奮了點(diǎn),給自己加顆星,:)
re: 對(duì)list的查找的另一種作法 PeakGao 2006-06-11 21:06
@LOGOS
是的,iterator會(huì)隨著節(jié)點(diǎn)的增刪而導(dǎo)致prev,next節(jié)點(diǎn)地址無(wú)效,你不要去真正記錄iterator的地址,記錄節(jié)點(diǎn)地址就可以了