
2010年12月10日
我想寫一個爬蟲程序。現在需要存放訪問過的URL。如果用數據庫存放則太慢,若放在默認的SET容器中,當到達一定數量時會使程序崩潰。
現在我想把文件直接映射成set<string>容器的空間。也就是set申請的內存全部在我所指定的文件中。
另外程序可用4G空間中有2G是系統保留的。如果進行文件映射后,是不是也只能訪問2G的空間?
最后,我想問問,如果我進行了文件映射,同時又從實際內存中申請了一快內存,如何保證映射的地址和從內存中申請的地址不重復呢?
請大家幫幫忙,最后有源碼或網站參考。
posted @
2010-12-10 16:18 HIT@ME 閱讀(2024) |
評論 (6) |
編輯 收藏

2009年9月3日
我現在需要統計一篇文章中的單詞數量,并排序輸出。
格式
單詞1 500
單詞2 499
單詞3 300
.....
...
..
.
現在的思路是
第一步:先將單詞讀入到map<string,size_t> ssmap;當中;這樣每次掃描到一個新單詞后都可以++ssmap[str];來統計單詞數;
第二步:將map中的內容拷貝到vector<pair<string*,size_t> > vec;當中,之后對vec用sort進行排序。(之所以要用string*是因為不希望發生string的拷貝構造,以免浪費時間)。
第三步:將vec輸出。
試驗了一下上述方法可以正確執行。
但我想應該有更快的方法,請各位賜教一下!
呵呵,謝謝大家這么積極。
字符串長度沒有限制,這個從一個分詞程序對文章進行分詞處理以后的結果。單詞可能是“的,了”這種單個字,也可能是“中華人民共和國”這種字符串。還有可能遇到像“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\...(n個)”這種比較變態的符號。
posted @
2009-09-03 16:05 HIT@ME 閱讀(1995) |
評論 (16) |
編輯 收藏

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

2009年6月30日
記得以前在一本書上看過boost::shared_ptr的回帶來一定的效率損失,但是并不大.今天閑來無事,編譯了一個BOOST并簡單測試了一下,看看到底有多少性能損失.測試代碼和結果如下:
比較函數
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結果:
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;
}
指針結果:
937
938
954
953
953
執行速度已經相差一倍了.自動內存管理的代價啊!~~~~
環境:Q8200 2.33GHZ 4G內存
以上只是簡單的測試,僅拱參考
補充說明:
很多朋友流言說在MAP中存放string*沒有意義。可是我上一個項目就需要這么做。
試想我現在有10篇文檔,現在需要統計每篇文檔當中每個字出現的次數,還需要統計全部文章中全部字出現的次數。為了保證效率,應當保證每個字在內存當中只留一份拷貝(因為以后有可能統計每個詞,甚至每句話出現的次數)。要實現這個功能,是否還有更好的算法?
還有朋友流言說指針版沒有銷毀string指針。可是在這個程序中執行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也沒有釋放資源。所以資源的釋放不會造成誤差。
luck朋友的方法最為有效,把比較函數變成:
bool operator() (const T &lh,const T &rh) const
{
return *lh<*rh;
}
下面是shared_ptr執行5次的時間:
968
969
985
969
969
下面是string*執行5次的時間:
859
875
860
859
860
看來即使是小對象也不能放松!當很多小對象發生構造和析構時所耗費的時間還是不容小視的!~
posted @
2009-06-30 21:09 HIT@ME 閱讀(3808) |
評論 (14) |
編輯 收藏

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

2008年12月29日
2008.12.29
昨天晚上終于把象棋的棋盤畫出來了!
今天則需要把棋子初始化,之后放到象棋開局的位置上。(這個工作也順利完成了)
現在的工作是如何在CplayDlg類上面移動棋子。現在的思路是在棋盤類當中加入一個二維數組,將屏幕坐標和棋盤的邏輯坐標一一對應,以方便查找。然后將選定棋子move到新的位置,再調用OnPaint();
順便說一下現在程序當中的類
CplayDlg----MFC生成的主要類
CCheckerman----自己寫的棋子類。主要方法就是MOVE。
CChessboard----自己寫的棋盤類。負責畫出棋盤,并且建立屏幕坐標和棋盤邏輯坐標的對應關系~!
目前界面做到這個程度了。30號先回學校考試。之后聽完今年的維也納音樂會再來繼續做吧~!
順便說一下。這個棋盤是我自己一筆一筆用VC畫出來的。真費勁啊!還有那些棋子的素材也來之不易。我把一個象棋游戲當中的資源給拔下來了!又需要素材或者源程序的朋友請郵件聯系!~
ps:這個游戲的四大目標
1、實現雙人同機對戰
2、實現雙人網絡對戰
3、實現人機對戰
4、加入后臺數據庫實現用戶注冊和積分等功能。注冊部分希望可以獨立的使用Ruby on Rails寫出來!
小弟初學乍練。不到之處多多包涵! 2008.12.31
在2008年最后一天的下午,我又想寫一寫這個想起程序了。
目前遇到的問題是由于使用DrawIconEx等函數實現棋子的移動效果的時候屏幕會出現閃爍!請問各位如何防止這種情況的出現呢?換句話說就是在調用OnPaint函數的時候,只刷新當前棋子位置的屏幕,而其他部分則不刷新!
第二個問題是我想用GDI+來顯示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());
但是當把imang參數變為L"C:\\Users\\Administrator\\Desktop\\i200831313448532_2.jpg就能顯示出來。不知道是不是GDI+不支持ICO格式呢?(我又檢查了一遍,路徑沒有問題!);
請各位老大賜教一下吧!~
posted @
2008-12-29 00:30 HIT@ME 閱讀(2803) |
評論 (18) |
編輯 收藏