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