
2010年12月10日
我想寫(xiě)一個(gè)爬蟲(chóng)程序。現(xiàn)在需要存放訪問(wèn)過(guò)的URL。如果用數(shù)據(jù)庫(kù)存放則太慢,若放在默認(rèn)的SET容器中,當(dāng)?shù)竭_(dá)一定數(shù)量時(shí)會(huì)使程序崩潰。
現(xiàn)在我想把文件直接映射成set<string>容器的空間。也就是set申請(qǐng)的內(nèi)存全部在我所指定的文件中。
另外程序可用4G空間中有2G是系統(tǒng)保留的。如果進(jìn)行文件映射后,是不是也只能訪問(wèn)2G的空間?
最后,我想問(wèn)問(wèn),如果我進(jìn)行了文件映射,同時(shí)又從實(shí)際內(nèi)存中申請(qǐng)了一快內(nèi)存,如何保證映射的地址和從內(nèi)存中申請(qǐng)的地址不重復(fù)呢?
請(qǐng)大家?guī)蛶兔Γ詈笥性创a或網(wǎng)站參考。
posted @
2010-12-10 16:18 HIT@ME 閱讀(2036) |
評(píng)論 (6) |
編輯 收藏

2009年9月3日
我現(xiàn)在需要統(tǒng)計(jì)一篇文章中的單詞數(shù)量,并排序輸出。
格式
單詞1 500
單詞2 499
單詞3 300
.....
...
..
.
現(xiàn)在的思路是
第一步:先將單詞讀入到map<string,size_t> ssmap;當(dāng)中;這樣每次掃描到一個(gè)新單詞后都可以++ssmap[str];來(lái)統(tǒng)計(jì)單詞數(shù);
第二步:將map中的內(nèi)容拷貝到vector<pair<string*,size_t> > vec;當(dāng)中,之后對(duì)vec用sort進(jìn)行排序。(之所以要用string*是因?yàn)椴幌Ml(fā)生string的拷貝構(gòu)造,以免浪費(fèi)時(shí)間)。
第三步:將vec輸出。
試驗(yàn)了一下上述方法可以正確執(zhí)行。
但我想應(yīng)該有更快的方法,請(qǐng)各位賜教一下!
呵呵,謝謝大家這么積極。
字符串長(zhǎng)度沒(méi)有限制,這個(gè)從一個(gè)分詞程序?qū)ξ恼逻M(jìn)行分詞處理以后的結(jié)果。單詞可能是“的,了”這種單個(gè)字,也可能是“中華人民共和國(guó)”這種字符串。還有可能遇到像“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\...(n個(gè))”這種比較變態(tài)的符號(hào)。

2009年8月20日
摘要: 最近在百度知道上回答了一道問(wèn)題,并為他封裝了一個(gè)類來(lái)解決。大意是不開(kāi)辟新的數(shù)組同時(shí)排序兩個(gè)數(shù)組。
http://zhidao.baidu.com/question/112777967.html
之后想要給這個(gè)類添加iterator好直接使用sort之類的函數(shù),經(jīng)過(guò)1個(gè)多小時(shí)的忙碌(能力有限,可以鄙視一下),終于實(shí)現(xiàn)了random_access_iterator.
閱讀全文
posted @
2009-08-20 10:06 HIT@ME 閱讀(1917) |
評(píng)論 (4) |
編輯 收藏

2009年6月30日
記得以前在一本書(shū)上看過(guò)boost::shared_ptr的回帶來(lái)一定的效率損失,但是并不大.今天閑來(lái)無(wú)事,編譯了一個(gè)BOOST并簡(jiǎn)單測(cè)試了一下,看看到底有多少性能損失.測(cè)試代碼和結(jié)果如下:
比較函數(shù)
template <class T>
class compareP
{
public:
bool operator() (const T lh,const T rh) const
{
return *lh<*rh;
}
};
boost:
int _tmain(int argc, _TCHAR* argv[])
{
DWORD oldtime = GetTickCount();
typedef map<boost::shared_ptr<string>,size_t,compareP<boost::shared_ptr<string> > > container_type;
typedef container_type::iterator iterator;
container_type container;
for (size_t i(0) ; i<500000 ; ++i)
{
boost::shared_ptr<string> pstr(new string);
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
}
cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}
boost結(jié)果:
2000
2015
2015
2016
2017
指針:
int _tmain(int argc, _TCHAR* argv[])
{
DWORD oldtime = GetTickCount();
typedef map<string*,size_t,compareP<string*> > container_type;
typedef container_type::iterator iterator;
container_type container;
for (size_t i(0) ; i<500000 ; ++i)
{
string *pstr = new string;
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
}
cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}
指針結(jié)果:
937
938
954
953
953
執(zhí)行速度已經(jīng)相差一倍了.自動(dòng)內(nèi)存管理的代價(jià)啊!~~~~
環(huán)境:Q8200 2.33GHZ 4G內(nèi)存
以上只是簡(jiǎn)單的測(cè)試,僅拱參考
補(bǔ)充說(shuō)明:
很多朋友流言說(shuō)在MAP中存放string*沒(méi)有意義。可是我上一個(gè)項(xiàng)目就需要這么做。
試想我現(xiàn)在有10篇文檔,現(xiàn)在需要統(tǒng)計(jì)每篇文檔當(dāng)中每個(gè)字出現(xiàn)的次數(shù),還需要統(tǒng)計(jì)全部文章中全部字出現(xiàn)的次數(shù)。為了保證效率,應(yīng)當(dāng)保證每個(gè)字在內(nèi)存當(dāng)中只留一份拷貝(因?yàn)橐院笥锌赡芙y(tǒng)計(jì)每個(gè)詞,甚至每句話出現(xiàn)的次數(shù))。要實(shí)現(xiàn)這個(gè)功能,是否還有更好的算法?
還有朋友流言說(shuō)指針版沒(méi)有銷毀string指針。可是在這個(gè)程序中執(zhí)行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也沒(méi)有釋放資源。所以資源的釋放不會(huì)造成誤差。
luck朋友的方法最為有效,把比較函數(shù)變成:
bool operator() (const T &lh,const T &rh) const
{
return *lh<*rh;
}
下面是shared_ptr執(zhí)行5次的時(shí)間:
968
969
985
969
969
下面是string*執(zhí)行5次的時(shí)間:
859
875
860
859
860
看來(lái)即使是小對(duì)象也不能放松!當(dāng)很多小對(duì)象發(fā)生構(gòu)造和析構(gòu)時(shí)所耗費(fèi)的時(shí)間還是不容小視的!~

2009年6月12日
摘要: 大學(xué)畢業(yè)了!!上來(lái)感嘆一下!并拿出自己的畢業(yè)設(shè)計(jì)分享一下。
這個(gè)小東西是用了一個(gè)星期完成的。BUG肯定不少,大家湊合著看一下吧。感覺(jué)有趣的就拿去玩玩。
說(shuō)說(shuō)基本思路。
1.對(duì)文件進(jìn)行分詞處理
2.通過(guò)統(tǒng)計(jì)訓(xùn)練文檔當(dāng)中的詞頻方差,構(gòu)造評(píng)判矩陣
3.之后在構(gòu)造待分類文檔的評(píng)判向量
4.用評(píng)判向量和構(gòu)造矩陣相乘,選出最接近的分類。
程序文件:
閱讀全文
posted @
2009-06-12 21:38 HIT@ME 閱讀(1419) |
評(píng)論 (2) |
編輯 收藏

2008年12月29日
2008.12.29
昨天晚上終于把象棋的棋盤(pán)畫(huà)出來(lái)了!
今天則需要把棋子初始化,之后放到象棋開(kāi)局的位置上。(這個(gè)工作也順利完成了)
現(xiàn)在的工作是如何在CplayDlg類上面移動(dòng)棋子。現(xiàn)在的思路是在棋盤(pán)類當(dāng)中加入一個(gè)二維數(shù)組,將屏幕坐標(biāo)和棋盤(pán)的邏輯坐標(biāo)一一對(duì)應(yīng),以方便查找。然后將選定棋子move到新的位置,再調(diào)用OnPaint();
順便說(shuō)一下現(xiàn)在程序當(dāng)中的類
CplayDlg----MFC生成的主要類
CCheckerman----自己寫(xiě)的棋子類。主要方法就是MOVE。
CChessboard----自己寫(xiě)的棋盤(pán)類。負(fù)責(zé)畫(huà)出棋盤(pán),并且建立屏幕坐標(biāo)和棋盤(pán)邏輯坐標(biāo)的對(duì)應(yīng)關(guān)系~!
目前界面做到這個(gè)程度了。30號(hào)先回學(xué)校考試。之后聽(tīng)完今年的維也納音樂(lè)會(huì)再來(lái)繼續(xù)做吧~!
順便說(shuō)一下。這個(gè)棋盤(pán)是我自己一筆一筆用VC畫(huà)出來(lái)的。真費(fèi)勁啊!還有那些棋子的素材也來(lái)之不易。我把一個(gè)象棋游戲當(dāng)中的資源給拔下來(lái)了!又需要素材或者源程序的朋友請(qǐng)郵件聯(lián)系!~
ps:這個(gè)游戲的四大目標(biāo)
1、實(shí)現(xiàn)雙人同機(jī)對(duì)戰(zhàn)
2、實(shí)現(xiàn)雙人網(wǎng)絡(luò)對(duì)戰(zhàn)
3、實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)
4、加入后臺(tái)數(shù)據(jù)庫(kù)實(shí)現(xiàn)用戶注冊(cè)和積分等功能。注冊(cè)部分希望可以獨(dú)立的使用Ruby on Rails寫(xiě)出來(lái)!
小弟初學(xué)乍練。不到之處多多包涵! 2008.12.31
在2008年最后一天的下午,我又想寫(xiě)一寫(xiě)這個(gè)想起程序了。
目前遇到的問(wèn)題是由于使用DrawIconEx等函數(shù)實(shí)現(xiàn)棋子的移動(dòng)效果的時(shí)候屏幕會(huì)出現(xiàn)閃爍!請(qǐng)問(wèn)各位如何防止這種情況的出現(xiàn)呢?換句話說(shuō)就是在調(diào)用OnPaint函數(shù)的時(shí)候,只刷新當(dāng)前棋子位置的屏幕,而其他部分則不刷新!
第二個(gè)問(wèn)題是我想用GDI+來(lái)顯示ICO圖像。可是卻失敗了,源碼如下……
Image image(L"C:\\Users\\Administrator\\Desktop\\ico128.ico");
CRect rect;
GetWindowRect(&rect);
Graphics graphics(hdc);
graphics.DrawImage(&image, 0, 0,rect.Width(),rect.Height());
但是當(dāng)把imang參數(shù)變?yōu)長(zhǎng)"C:\\Users\\Administrator\\Desktop\\i200831313448532_2.jpg就能顯示出來(lái)。不知道是不是GDI+不支持ICO格式呢?(我又檢查了一遍,路徑?jīng)]有問(wèn)題!);
請(qǐng)各位老大賜教一下吧!~