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