锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色图在线视频,欧美日韩在线播放三区四区,国产一区二区三区久久久http://m.shnenglu.com/tgh621/category/8152.html涓撴敞鎶鏈紑鍙?/description>zh-cnWed, 14 Jan 2009 06:14:40 GMTWed, 14 Jan 2009 06:14:40 GMT60鐢╓aitForSingleObject絳夊緟浜嬩歡澶勭悊http://m.shnenglu.com/tgh621/archive/2009/01/12/71782.html澶ф搗澶ф搗Mon, 12 Jan 2009 02:17:00 GMThttp://m.shnenglu.com/tgh621/archive/2009/01/12/71782.htmlhttp://m.shnenglu.com/tgh621/comments/71782.htmlhttp://m.shnenglu.com/tgh621/archive/2009/01/12/71782.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/71782.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/71782.html 1void ClearMessage(HWND hWnd,BOOL bExtMsg)
 2{
 3    MSG GetMsg;
 4    while(PeekMessage(&GetMsg,hWnd,0,0,PM_REMOVE))
 5    {        
 6        if(GetMsg.message == WM_TIMER) continue;
 7        TranslateMessage(&GetMsg);
 8        DispatchMessage(&GetMsg);
 9    }
            
10    if(hWnd != NULL && bExtMsg)
11    {    
12        while(PeekMessage(&GetMsg,NULL,WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,PM_REMOVE))
13        {        
14            TranslateMessage(&GetMsg);
15            DispatchMessage(&GetMsg);
16        }
                                
17        while(PeekMessage(&GetMsg,NULL,0,0,PM_QS_PAINT))
18        {        
19            TranslateMessage(&GetMsg);
20            DispatchMessage(&GetMsg);
21        }

22    }

23}

24
25void CExportRegeditToXml::OnBnClickedCancel()
26{
27
28
29    if ( ( NULL != m_TransRegedit )  && ( !pThreadData->m_brepalce) ) 
30    {
31        if(MessageBox(_T("鐩墠姝e湪瀵煎嚭娉ㄥ唽琛紝鏄惁鍙栨秷!"),_T("璀﹀憡"),MB_YESNO)!=IDYES)
32            return;
33        pThreadData->m_brepalce = TRUE;
34
35        while (m_TransRegedit && WaitForSingleObject(m_TransRegedit->m_hThread,40)!=WAIT_OBJECT_0) 
36        {
37            ClearMessage(NULL, TRUE);
38        }

39        m_TransRegedit = NULL;
40    }

41
42    OnCancel();
43}


澶ф搗 2009-01-12 10:17 鍙戣〃璇勮
]]>
銆愯漿銆戝瓧絎︿覆鍖歸厤綆楁硶錛堝洓錛夊彲浠ユ粦鍔ㄥ榪?/title><link>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Tue, 11 Nov 2008 05:09:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/66596.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/66596.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/66596.html</trackback:ping><description><![CDATA[     鎽樿: 璁板緱鍦ㄧ┓涓炬硶涓紝姣忎竴瓚熸瘮杈冨悗錛屾棤璁烘垚涓庝笉鎴愶紝閮藉皢妯″紡鍚戝彸婊戝姩涓涓綅緗紝鐒跺悗緇х畫姣旇緝銆傛湁娌℃湁鍔炴硶鑳藉埄鐢ㄤ箣鍓嶇殑姣旇緝緇撴灉錛屼嬌寰楁ā寮忔粦鍔ㄧ殑鏇磋繙涓鐐瑰憿錛? 鍦ㄤ粙緇嶇粡鍏哥殑KMP綆楁硶鍓嶏紝鎴戝厛浠嬬粛鍑犱釜綆鍗曠殑婊戝姩綾葷畻娉曘? Not So Naive 鍚屽悕瀛椾竴鏍鳳紝榪欎釜綆楁硶鐨勭‘鏈夌偣騫肩錛屽畠鏍規嵁妯″紡鐨勫墠涓や釜瀛楃鏄惁鐩稿悓鏉ユ粦鍔ㄦ瘮絀蜂婦娉曠◢闀夸竴鐐圭殑璺濈錛氬鏋滃墠涓や釜瀛楃鐩稿悓錛岄偅涔堟枃鏈腑涓庣浜屼釜瀛楃涓嶅悓鍒欏繀鐒朵篃涓庣涓...  <a href='http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/tgh621/aggbug/66596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2008-11-11 13:09 <a href="http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title> 銆愯漿銆戝瓧絎︿覆鍖歸厤綆楁硶錛堜笁錛変綅榪愮畻鐨勯瓟娉曗斺擪R涓嶴Ohttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.html澶ф搗澶ф搗Tue, 11 Nov 2008 05:08:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.htmlhttp://m.shnenglu.com/tgh621/comments/66595.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/66595.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66595.html浣嶈繍綆楃粡甯歌兘鍋氬嚭涓浜涗笉鍙濊鐨勪簨鎯呮潵錛屼緥濡備笉鐢ㄤ復鏃跺彉閲忚浜ゆ崲涓や釜鏁拌鎬庝箞鍋氬憿錛熶竴涓病鎺ヨЕ榪囪繖綾婚棶棰樼殑浜烘墦姝諱粬涔熸兂涓嶅嚭鏉ャ傚鏋滄嬁鍥存鏉ュ仛姣斿柣錛岄偅涔堜綅榪愮畻鍙互鍠諱負緙栫▼涓殑“鎵嬬瓔”銆?/div>

鎸変綅鐨勫瓨鍌ㄦ柟寮忚兘鎻愪緵鏈澶х殑瀛樺偍絀洪棿鍒╃敤鐜囷紝鑰岄殢鐫絀洪棿琚帇緙╃殑鍚屾椂錛岀敱浜嶤PU紜歡鐨勭洿鎺ユ敮鎸侊紝閫熷害绔熺劧紲炲鑸殑鎻愬崌浜嗐備婦涓緥瀛愶紝鏅氱殑鏁扮粍瑕佸疄鐜扮Щ浣嶆搷浣滐紝閭f槸O(n)鐨勬椂闂村鏉傚害錛岃屽鏋滅敤浣嶈繍綆椾腑鐨勭Щ浣嶏紝灝辨槸涓涓寚浠ゆ悶瀹氫簡銆?/div>

KR綆楁硶

KR綆楁硶涔嬪墠絎竴绔犱粙緇嶄腑璇存槸鍒╃敤鍝堝笇錛屽師鏂囪繖涔堜粙緇嶇殑銆傝屾垜鐨勭湅娉曟槸錛屽搱甯屽彧鏄竴涓箤瀛愩傝繖涓畻娉曠殑鍩烘湰姝ラ鍚岀┓涓炬硶涓鏍鳳紝涓嶅悓鍦ㄤ簬姣忚稛姣旇緝鍓嶅厛姣旇緝涓涓嬪搱甯屽鹼紝hash鍊間笉鍚屽氨涓嶅繀姣旇緝浜嗐傝屽鏋渉ash鍊兼棤娉曢珮鏁堣綆楋紝榪欐牱鐨勬敼榪涚敋鑷寵繕涓嶅涓嶆敼榪涘憿銆備綘鎯蟲兂錛屾瘮杈冧箣鍓嶈繕瑕佸厛璁$畻涓閬峢ash鍊鹼紝鏈夎綆楃殑鍔熷か錛岀洿鎺ユ瘮閮芥瘮瀹屼簡銆?/div>

KR綆楁硶涓轟簡鎶婃尐涓瓧絎︾殑姣旇緝杞寲涓轟袱涓暣鏁扮殑姣旇緝錛屽畠鎶婁竴涓猰闀垮害鐨勫瓧絎︿覆鐩存帴褰撴垚涓涓暣鏁版潵瀵瑰緟錛屼互2涓哄熀鏁扮殑鏁存暟銆傝繖鏍峰憿錛屽湪絎竴嬈$畻鍑鴻繖涓暣鏁板悗錛屼互鍚庢瘡嬈$Щ鍔ㄧ獥鍙o紝鍙渶瑕佺Щ鍘繪渶楂樹綅錛屽啀鍔犱笂鏈浣庝綅錛屽氨寰楀嚭涓涓柊鐨刪ash鍊箋備絾鏄痬澶ぇ錛屽鑷磋秴鍑鴻綆楁満鎵鑳藉鐞嗙殑鏈澶ф暣鏁版庝箞鍔烇紵涓嶇敤鎷呭績錛屽鏁存暟鏈澶у煎彇妯★紝鍊熷姪妯¤繍綆楃殑鐗規э紝涓鍒囧彲浠ュ畬緹庣殑榪涜銆傝屼笖鐢變簬鏄鏁存暟鏈澶у煎彇妯★紝鎵浠ュ彇妯¤繖涓姝ラ兘鍙互蹇界暐鎺夈?/div>

榪欐槸KR綆楁硶鐨勪唬鐮侊細
  1. #define REHASH(a, b, h) ((((h) - (a)*d) << 1) + (b))
  2. void KR(char *x, int m, char *y, int n) {
  3.    int d, hx, hy, i, j;
  4.    /* Preprocessing */
  5.    /* computes d = 2^(m-1) with
  6.       the left-shift operator */
  7.    for (d = i = 1; i < m; ++i)
  8.       d = (d<<1);
  9.    for (hy = hx = i = 0; i < m; ++i) {
  10.       hx = ((hx<<1) + x[i]);
  11.       hy = ((hy<<1) + y[i]);
  12.    }
  13.    /* Searching */
  14.    j = 0;
  15.    while (j <= n-m) {
  16.       if (hx == hy && memcmp(x, y + j, m) == 0)
  17.          OUTPUT(j);
  18.       hy = REHASH(y[j], y[j + m], hy);
  19.       ++j;
  20.    }
  21. }
鎴戜滑鍙互鐪嬪埌錛孠R綆楁硶鏈塐(m)澶嶆潅搴︾殑棰勫鐞嗙殑榪囩▼錛屾繪劅瑙夊畠鐨勯澶勭悊娌℃湁鍙嶆槧鍑烘ā寮忔湰韜殑鐗圭偣鏉ワ紝瀵艱嚧瀹冪殑鎼滅儲榪囩▼渚濈劧鏄疧(mn)澶嶆潅搴︾殑錛屽彧涓嶈繃涓鑸儏鍐典笅浣撶幇涓嶅嚭鏉ワ紝鍦?aaaaaaaaaaaaaaaaaaaaaaaaa"涓悳"aaaaa"灝辯煡閬揔R澶氭參浜嗐?/div>

鎬葷殑鏉ヨ錛孠R綆楁硶姣旂┓涓懼己涓鐐癸紝姣旇緝嬈℃暟鐨勬湡鏈涘兼槸O(m+n)銆?/div>

Shift Or 綆楁硶

涓轟簡鏈澶ч檺搴︾殑鍙戞尌鍑轟綅榪愮畻鐨勮兘鍔涳紝Shift Or綆楁硶灝辨湁浜嗕竴涓渶澶х己闄鳳細妯″紡涓嶈兘瓚呰繃鏈哄櫒瀛楅暱銆傛寜鐜板湪鏅亶鐨?2浣嶆満錛屾満鍣ㄥ瓧闀垮氨鏄?2錛屼篃灝辨槸鍙兘鐢ㄦ潵鍖歸厤涓嶅ぇ浜?2涓瓧絎︾殑妯″紡銆傝屽甫鏉ョ殑濂藉灝辨槸鍖歸厤榪囩▼鏄疧(n)鏃墮棿澶嶆潅搴︾殑錛岃揪鍒拌嚜鍔ㄦ満鐨勯熷害浜嗐傝岄澶勭悊鎵鑺辮垂鐨勬椂闂翠笌絀洪棿閮戒負O(m+σ)錛屾瘮鑷姩鏈哄皯澶氫簡銆?/div>

鎴戜滑鏉ョ湅鐪嬪畠鎬庝箞宸у鐨勫疄鐜?#8220;鍙湅涓閬?#8221;鐨勶細

鍋囪鎴戜滑鏈変竴涓崌綰х郴緇燂紝鎬誨叡鏈塵涓駭鍒傛瘡涓鍏抽兘浼氭斁涓涓柊浜哄埌絎?綰т笂錛岀劧鍚庡浜庣郴緇熶腑鎵鏈夌殑浜猴紝濡傛灉閫氳繃鑰冮獙錛屽崌涓綰э紝鍚﹀垯錛屽挃鍤撴帀銆傝屽浜庡崌鍒版渶楂樼駭鐨勪漢錛岄偅璇存槑浠栬繛緇氳繃浜唌嬈¤冮獙錛岃繖灝辨槸鎴戜滑瑕侀夋嫈鐨勪漢銆?/div>

KR綆楁硶鐨勬濊礬灝辨槸涓婇潰鐨勫崌綰ц鍒欙紝緇欏嚭鐨勮冮獙灝辨槸浣犵殑浣嶇疆涓婄殑瀛楃涓庣粰鍑虹殑鏂囨湰瀛楃鏄惁涓鑷淬傚崌婊$駭浜嗭紝璇存槑鍦ㄨ繛緇璵涓綅緗笂涓庝笉鏂粰鍑虹殑鏂囨湰瀛楃涓鑷達紝榪欎篃灝辨槸鍖歸厤鎴愬姛浜嗐?/div>

鏄庣櫧浜嗚繖涓濊礬鍚庯紝鐤戦棶灝卞紑濮嬪嚭鏉ヤ簡錛氭鏌ュ摢浜涗綅緗笌鏂囨湰瀛楃涓鑷達紝闇瑕乵嬈″惂錛熼偅涔堟暣涓畻娉曞氨鏄疧(mn)浜嗭紵

鐜板湪灝辮浣嶈繍綆楀嚭鍦轟簡錛屽錛岃繖涓畻娉曠殑鎬濊礬鏄緢絎紝浣嗘槸鎴戜綅榪愮畻鐨勬晥鐜囬珮鍛錛屼簨鍏堟垜綆楀嚭瀛楁瘝琛ㄤ腑姣忎釜瀛楃鍦ㄦā寮忎腑鍑虹幇鐨勪綅緗紝鐢ㄤ綅鐨勬柟寮忓瓨鍦ㄦ暣鏁伴噷錛屽嚭鐜扮殑鍦版柟鏍囦負0錛屼笉鍑虹幇鐨勫湴鏂規爣涓?錛岃繖鏍鋒誨叡浣跨敤σ涓暣鏁幫紱鍚屾牱錛屾垜鐢ㄤ竴涓暣鏁版潵琛ㄧず鍗囩駭鐘舵侊紝鏌愪釜綰у埆鏈変漢灝辨爣涓?錛屾病浜哄氨鏍囦負1錛屾暣涓郴緇熷崌綰у氨鎭板ソ鍙互鐢?#8220;縐諱綅”鏉ヨ繘琛岋紝褰撴鏌ヤ綅緗殑鏃跺欏彧闇瑕佷笌琛ㄧず鐘舵佺殑鏁存暟“鎴?#8221;1嬈★紝鎵浠ユ暣涓畻娉曞氨鎴怬(n)浜嗐係hift-Or綆楁硶鍚嶅瓧灝辨槸榪欐牱鏉ョ殑銆?/div>

鏈変竴涓湴鏂瑰緢濂囨紝0鍜?鐨勮瀹氬拰閫氬父鐨勪範鎯浉鍙嶅憖錛屼範鎯笂錛屽枩嬈㈡妸瀛樺湪璁句負1錛屼笉瀛樺湪璁句負0鐨勩備笉榪囪繖閲屾病鏈夊姙娉曪紝鍥犱負縐諱綅鏂扮Щ鍑烘潵鐨勬槸0銆?/div>

榪欐椂鎴戜滑鏉ョ湅浠g爜灝卞鏄撶悊瑙e浜嗭細
  1. #define WORDSIZE sizeof(int)*8
  2. #define ASIZE 256
  3. int preSo(const char *x, int m, unsigned int S[]) {
  4.         unsigned int j, lim;
  5.         int i;
  6.         for (i = 0; i < ASIZE; ++i)
  7.                 S[i] = ~0;
  8.         for (lim = i = 0, j = 1; i < m; ++i, j <<= 1) {
  9.                 S[x[i]] &= ~j;
  10.                 lim |= j;
  11.         }
  12.         lim = ~(lim>>1);
  13.         return(lim);
  14. }
  15. void SO(const char *x, int m, const char *y, int n) {
  16.         unsigned int lim, state;
  17.         unsigned int S[ASIZE];
  18.         int j;
  19.         if (m > WORDSIZE)
  20.                 error("SO: Use pattern size <= word size");
  21.         /* Preprocessing */
  22.         lim = preSo(x, m, S);
  23.         /* Searching */
  24.         for (state = ~0, j = 0; j < n; ++j) {
  25.                 state = (state<<1) | S[y[j]];
  26.                 if (state < lim)
  27.                         OUTPUT(j - m + 1);
  28.         }
  29. }
浠g爜涓璴im鍙橀噺鍏跺疄灝辨槸涓涓爣灝猴紝渚嬪鍑虹幇鏈楂樼駭鐨勭姸鎬佹槸01111111錛岄偅涔坙im灝辨垚浜?0000000錛屽洜姝ゅ彧瑕佸皬浜巐im錛屽氨琛ㄧず鏈楂樼駭涓婄殑0鍑虹幇浜嗐?

鍘熸枃涓Shift-Or綆楁硶鐨勬弿榪拌繕鏄緢闅炬噦鐨勶紝濡傛灉瀵圭潃閭f璇存槑鍘葷湅浠g爜錛屾湁鐐逛笉鐭ユ墍浜戠殑鎰熻銆傛垜榪樻槸鐩存帴瀵圭潃浠g爜鎵嶆兂鍑鴻繖涓崌綰х殑姣斿柣鏉ャ?/div>

澶ф搗 2008-11-11 13:08 鍙戣〃璇勮
]]> [杞琞瀛楃涓插尮閰嶇畻娉曪紙浜岋級絀蜂婦涓庤嚜鍔ㄦ満http://m.shnenglu.com/tgh621/archive/2008/11/11/66594.html澶ф搗澶ф搗Tue, 11 Nov 2008 05:07:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66594.htmlhttp://m.shnenglu.com/tgh621/comments/66594.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66594.html#Feedback1http://m.shnenglu.com/tgh621/comments/commentRss/66594.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66594.html
Rob Pike, 鏈浼熷ぇ鐨凜 璇█澶у笀涔嬩竴, 鍦ㄣ奛otes on C Programming銆嬩腑闃愯堪浜嗕竴涓師鍒欙細鑺卞摠鐨勭畻娉曟瘮綆鍗曠畻娉曟洿瀹規槗鍑篵ug銆佹洿闅懼疄鐜幫紝灝介噺浣跨敤綆鍗曠殑綆楁硶閰嶅悎綆鍗曠殑鏁版嵁緇撴瀯銆傝?/span>Ken Thompson鈥斺擴nix 鏈鍒濈増鏈殑璁捐鑰呭拰瀹炵幇鑰咃紝紱呭畻鍋堣鑸湴瀵筆ike 鐨勮繖涓鍘熷垯浣滀簡寮鴻皟錛?nbsp;鎷夸笉鍑嗗氨絀蜂婦錛圵hen in doubt , use brute force錛?/span>銆?nbsp;鑰屽浜庤13鐖卞ソ鑰呮潵璇達紝鏇存槸鑷豹鐨勭О鍏朵嬌鐢ㄧ殑鏄疊F綆楁硶銆?/span>

絀蜂婦娉曠敤鍦ㄥ瓧絎︿覆鍖歸厤涓婏紝綆鍗曠殑鎻忚堪灝辨槸錛屾鏌ユ枃鏈粠0鍒皀-m鐨勬瘡涓涓綅緗紝鐪嬬湅浠庤繖涓綅緗紑濮嬫槸鍚︿笌妯″紡鍖歸厤銆傝繖縐嶆柟娉曡繕鏄湁涓浜涗紭鐐圭殑錛屽錛氫笉闇瑕侀澶勭悊榪囩▼錛岄渶瑕佺殑棰濆絀洪棿涓哄父鏁幫紝姣忎竴瓚熸瘮杈冩椂鍙互浠ヤ換鎰忛『搴忚繘琛屻?br>

灝界瀹冪殑鏃墮棿澶嶆潅搴︿負O(mn)錛屼緥濡傚湪鏂囨湰"aaaaaaaaaaaaaaaaaaaaaaaaaaa"涓鎵?aaaaab"鏃訛紝灝卞畬鍏ㄤ綋鐜板嚭鏉ヤ簡銆備絾鏄畻娉曠殑鏈熸湜鍊煎嵈鏄?n錛岃繖琛ㄦ槑璇ョ畻娉曞湪瀹為檯搴旂敤涓晥鐜囦笉浣庛?/div>

C浠g爜濡備笅錛?/div>
  1. void BF(char *x, int m, char *y, int n) {
  2.    int i, j;
  3.    /* Searching */
  4.    for (j = 0; j <= n - m; ++j) {
  5.       for (i = 0; i < m && x[i] == y[i + j]; ++i);
  6.       if (i >= m)
  7.          OUTPUT(j);
  8.    }
  9. }
  10.   
濡傛灉鎴戜滑娉ㄦ剰鍒癈搴撳嚱鏁版槸姹囩紪浼樺寲榪囩殑錛屽茍閫氬父鑳芥彁渚涙瘮C浠g爜鏇撮珮鐨勬ц兘鐨勮瘽錛屾垜浠彲浠ョ敤memcmp鏉ュ畬鎴愭瘡涓瓚熸瘮杈冭繃紼嬶紝浠庤岃揪鍒版洿濂界殑鎬ц兘錛?/div>
  1. #define EOS '\0'
  2.    
  3. void BF(char *x, int m, char *y, int n) { 
  4.   char *yb; 
  5.   /* Searching */ 
  6.   for (yb = y; *y != EOS; ++y) 
  7.     if (memcmp(x, y, m) == 0) 
  8.       OUTPUT(y - yb);
  9. }
鑷姩鏈虹殑鏂規硶鍏跺疄鍜岀┓涓炬硶鏈夌偣鐩鎬技錛岄兘鏄敤鏈綆鍗曠洿鐧界殑鏂瑰紡鏉ュ仛浜嬫儏銆傚尯鍒湪浜庣┓涓炬硶鏄湪璁$畻錛岃岃嚜鍔ㄦ満鍒欐槸鏌ヨ〃銆傚敖綆¤嚜鍔ㄦ満鐨勬瀯閫犺繃紼嬫湁涓鐐圭偣闅捐В錛岃娑夊強鍒癉FA鐨勭悊璁猴紝浣嗘槸鑷姩鏈虹殑姣旇緝榪囩▼閭g粷瀵規槸綆鍗曞埌鏃犺銆?/div>

綆鍗曡鏉ワ紝鏍規嵁妯″紡涓詫紝鐢誨ソ浜嗕竴寮犲ぇ鐨勮〃鏍鹼紝琛ㄦ牸m+1琛?#963;鍒楋紝榪欓噷σ琛ㄧず瀛楁瘝琛ㄧ殑澶у皬銆傝〃鏍兼瘡涓琛岃〃紺轟竴縐嶇姸鎬侊紝鐘舵佹暟姣旀ā寮忛暱搴﹀1銆備竴寮濮嬬殑鐘舵佹槸0錛屼篃灝辨槸澶勫湪琛ㄦ牸鐨勭0琛岋紝榪欎竴琛岀殑姣忎釜鍏冪礌鎸囩ず浜嗗綋閬囧埌鏌愬瓧絎︽椂灝辮煩杞埌鍙︿竴涓姸鎬併傛瘡褰撹煩杞埌鏈緇堢姸鎬佹椂錛岃〃紺烘壘鍒頒簡涓涓尮閰嶃?/div>

璇█琛ㄨ堪璧鋒潵榪樻槸姣旇緝鍟板棪錛岀湅浠g爜灝辯煡閬撲簡錛?/div>
  1. #define ASIZE 256
  2. int preAut(const char *x, int m, int* aut) {
  3.         int i, state, target, old;
  4.         for (state = 0, i = 0; i < m; ++i) {
  5.                 target = i + 1;
  6.                 old = aut[state * ASIZE + x[i]];
  7.                 aut[state * ASIZE + x[i]] = target;
  8.                 memcpy(aut + target * ASIZE, aut + old * ASIZE, ASIZE*sizeof(int));
  9.                 state = target;
  10.         }
  11.         return state;
  12. }
  13. void AUT(const char *x, int m, const char *y, int n) {
  14.         int j, state;
  15.         /* Preprocessing */
  16.         int *aut = (int*)calloc((m+1)*ASIZE, sizeof(int));
  17.         int Terminal = preAut(x, m, aut);
  18.         /* Searching */
  19.         for (state = 0, j = 0; j < n; ++j) {
  20.                 state = aut[state*ASIZE+y[j]];
  21.                 if (state == Terminal)
  22.                         OUTPUT(j - m + 1);
  23.         }
  24. }
錛?span class=Apple-style-span style="COLOR: rgb(51,51,153)">娉細鍘熸枃鐨勪唬鐮佷嬌鐢ㄤ竴涓湁鍚戝浘鐨勬暟鎹粨鏋勶紝鎴戦伒寰ぇ甯堢殑鎸囧紩錛屾敼鐢ㄤ簡鏇寸畝鍗曚竴鐐圭殑鏁扮粍錛?br>

浠庝唬鐮佷笂鎴戜滑寰堝鏄撶湅鍑猴紝鑷姩鏈虹殑鏋勯犻渶瑕佹椂闂存槸O(mσ)錛岀┖闂翠篃鏄疧(mσ)錛堜弗鏍兼潵璇磋繖浠戒唬鐮佷嬌鐢ㄤ簡O((m+1)σ)錛夛紝浣嗘槸涓鏃︽瀯閫犲畬姣曪紝鎺ヤ笅鏉ュ尮閰嶇殑鏃墮棿鍒欐槸O(n)銆?/div>

鍖歸厤鐨勮繃紼嬪墠闈㈠凡緇忚浜嗭紝澶畝鍗曚簡娌′粈涔堝ソ璇寸殑錛岃繖閲屽氨瑙i噴涓涓嬫瀯閫犺繃紼嬪惂錛?/div>

鎴戜滑鏋勯犵殑鐩爣鏄搴旀ā寮忛暱搴︼紝鏋勯犲嚭鍚屾牱澶氱殑鐘舵侊紝鐢?琛ㄧず鍒濆鐘舵侊紝鐒跺悗絎竴涓瓧絎︾敤鐘舵?琛ㄧず錛岀浜屼釜鐢ㄧ姸鎬?琛ㄧず錛屼緷嬈$被鎺紝鐩村埌鏈鍚庝竴涓瓧絎︼紝鐢╩琛ㄧず錛屼篃鏄渶緇堢姸鎬併?/div>

涓寮濮嬶紝鏁扮粍鍏ㄩ兘緗?錛岋紝榪欎釜鏃跺欑殑鑷姩鏈洪亣鍒頒換浣曞瓧絎﹂兘杞埌鍒濆鐘舵併傜劧鍚庣粰瀹冪湅妯″紡鐨勭涓涓瓧絎︼紝鍋囪榪欐槸'a'鍚э紝鍛婅瘔瀹冿紝鐘舵?閬囧埌'a'搴旇鍒頒竴涓柊鐨勭姸鎬佲斺旂姸鎬?錛屾墍浠ユ妸絎?琛岀殑絎?a'鍒椾慨鏀逛負1銆傝岃繖涓椂鍊欑姸鎬?榪樻槸絀虹櫧鐨勶紝鎬庝箞鍔炲憿錛?/div>

榪欐椂鍊欑姸鎬?灝辨兂鍛錛屽湪鎴戣鍛婄煡閬囧埌'a'瑕佸幓鐘舵?涔嬪墠錛屾垜鍘熸湰閬囧埌'a'閮借鍘葷姸鎬?鐨勶紝涔熷氨鏄慨鏀逛箣鍓嶇'a'鍒楁墍鎸囩殑閭d釜鐘舵侊紝縐頒負old鐘舵佸惂錛涜岀幇鍦ㄦ垜閬囧埌'a'鍗磋鍘諱竴涓柊鐨勭姸鎬侊紝鏃㈢劧浠ュ墠old鐘舵佽兘澶勭悊閬囧埌'a'涔嬪悗鐨勪簨鎯咃紝閭d箞鎴戣鏂扮殑鐘舵佸儚old鐘舵佷竴鏍峰氨濂戒簡銆備簬鏄姸鎬?鎶妎ld鐘舵佹嫹璐濆埌鐘舵?銆?/div>

鐜板湪杞埌鐘舵?浜嗭紝緇欏畠鐪嬬浜屼釜瀛楃錛屽畠涔熷娉曠偖鍒訛紝鎸囧悜浜嗙姸鎬?錛屽張鎶妎ld鐘舵佹嫹璐濈粰浜嗙姸鎬?銆?/div>

浜庢槸錛岀姸鎬佹満灝卞湪榪欑浠d唬浼犳壙鐨勮繃紼嬩腑鏋勯犲畬姣曚簡銆?/div>

铏界劧鐞嗚涓婅嚜鍔ㄦ満鏄渶瀹岀編鐨勫尮閰嶆柟寮忥紝浣嗘槸鐢變簬棰勫鐞嗙殑娑堣楄繃澶э紝瀹炶返涓紝涓昏榪樻槸鐢ㄤ簬姝e垯琛ㄨ揪寮忋?/div>

緇撹錛氱┓涓炬硶涓庤嚜鍔ㄦ満鍚勮嚜璧頒簡涓や釜鏋佺錛屽洜姝ら兘娌¤兘杈懼埌緇煎悎鎬ц兘鐨勬渶浣籌紝鏈枃涔嬪悗浠嬬粛鐨勭畻娉曪紝鍙互鐪嬫垚鏄湪絀蜂婦鍜岃嚜鍔ㄦ満涓よ呬箣闂村彇鑸嶆潈琛$殑緇撴灉銆?/div>


澶ф搗 2008-11-11 13:07 鍙戣〃璇勮
]]>[杞琞瀛楃涓插尮閰嶇畻娉曪紙涓錛夌畝浠?/title><link>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Tue, 11 Nov 2008 05:05:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/66593.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/66593.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/66593.html</trackback:ping><description><![CDATA[<div>鏂囨湰淇℃伅鍙互璇存槸榪勪粖涓烘鏈涓昏鐨勪竴縐嶄俊鎭氦鎹㈡墜孌碉紝鑰屼綔涓烘枃鏈鐞嗕腑鐨勪竴涓噸瑕侀鍩熲斺斿瓧絎︿覆鍖歸厤錛屽氨鏄垜浠粖澶╄璇寸殑璇濋銆傦紙<span id="hvzpftn" class=Apple-style-span style="COLOR: rgb(51,51,153)">鍘熸枃榪樼壒鎰忔彁鍙婃枃鏈暟鎹暟閲忔瘡18涓湀緲諱竴鐣紝浠ユ璁鴻瘉綆楁硶蹇呴』瑕佹槸楂樻晥鐨勩備笉榪囨垜娉ㄦ剰鍒版懇灝斿畾寰嬩篃鏄?8涓湀緲葷暘錛岃繖姝h鏄庢暟鎹殑澧為暱鏄揣绱ц窡闅忓鐞嗛熷害鐨勶紝鍥犳瓚婃槸浣跨敤楂樻晥鐨勭畻娉曪紝灝嗘潵寰呭鐞嗙殑鏁版嵁灝變細瓚婂銆傝繖涔熸彁紺哄睆騫曞墠鐨勫悇浣嶏紝浠g爜涓嶈鍐欏緱澶揩浜?#8230;…</span>錛?/div> <div><br></div> <div>瀛楃涓插尮閰嶆寚鐨勬槸浠庢枃鏈腑鎵懼嚭緇欏畾瀛楃涓詫紙縐頒負妯″紡錛夌殑涓涓垨鎵鏈夊嚭鐜扮殑浣嶇疆銆傛湰鏂囩殑綆楁硶涓寰嬭緭鍑哄叏閮ㄧ殑鍖歸厤浣嶇疆銆傛ā寮忎覆鍦ㄤ唬鐮佷腑鐢▁[m]鏉ヨ〃紺猴紝鏂囨湰鐢▂[n]鏉ワ紝鑰屾墍鏈夊瓧絎︿覆閮芥瀯閫犺嚜涓涓湁闄愰泦鐨勫瓧姣嶈〃Σ錛屽叾澶у皬涓?#963;銆?/div> <div><br></div> <div>鏍規嵁鍏堢粰鍑烘ā寮忚繕鏄厛緇欏嚭鏂囨湰錛屽瓧絎︿覆鍖歸厤鍒嗕負涓ょ被鏂規硶錛?/div> <div> <ul> <li><span id="hvzpftn" class=Apple-style-span style="LINE-HEIGHT: normal">絎竴綾繪柟娉曞熀浜庤嚜鍔ㄦ満鎴栬呭瓧絎︿覆鐨勭粍鍚堢壒鐐癸紝鍏跺疄鐜頒笂錛岄氬父鏄妯″紡榪涜棰勫鐞嗭紱</span><br> <li><span id="hvzpftn" class=Apple-style-span style="LINE-HEIGHT: normal">絎簩綾繪柟娉曞鏂囨湰寤虹珛绱㈠紩錛岃繖涔熸槸鐜板湪鎼滅儲寮曟搸閲囩敤鐨勬柟娉曘?/span></li> </ul> 鏈枃浠呰璁虹涓綾繪柟娉曘?br></div> <div><br></div> <div>鏂囦腑鐨勫尮閰嶇畻娉曢兘鏄熀浜庤繖鏍蜂竴縐嶆柟寮忔潵榪涜鐨勶細璁炬兂涓涓暱搴︿負m鐨勭獥鍙o紝棣栧厛紿楀彛鐨勫乏绔拰鏂囨湰鐨勫乏绔榻愶紝鎶婄獥鍙d腑鐨勫瓧絎︿笌妯″紡瀛楃榪涜姣旇緝錛岃繖縐頒負涓瓚熸瘮杈冿紝褰撹繖涓瓚熸瘮杈冨畬鍏ㄥ尮閰嶆垨鑰呭嚭鐜板け閰嶆椂錛屽皢紿楀彛鍚戝彸縐誨姩銆傞噸澶嶈繖涓繃紼嬶紝鐩村埌紿楀彛鐨勫彸绔埌杈句簡鏂囨湰鐨勫彸绔傝繖縐嶆柟娉曟垜浠氬父鍙玸liding window銆?/div> <div><br></div> <div>瀵逛簬絀蜂婦娉曟潵璇達紝鎵懼埌鎵鏈夊尮閰嶄綅緗渶瑕佺殑鏃墮棿涓篛(mn)錛屽熀浜庡絀蜂婦娉曟敼榪涚殑緇撴灉錛屾垜浠寜鐓ф瘡涓瓚熸瘮杈冩椂鐨勬瘮杈冮『搴忥紝鎶婅繖浜涚畻娉曞垎涓轟互涓嬪洓縐嶏細</div> <div> <ol> <li>浠庡乏鍒板彸錛氭渶鑷劧鐨勬柟寮忥紝涔熸槸鎴戜滑鐨勯槄璇婚『搴? <li>浠庡彸鍒板乏錛氶氬父鍦ㄥ疄璺典腑鑳戒駭鐢熸渶濂界殑綆楁硶 <li>鐗規畩欏哄簭錛氬彲浠ヨ揪鍒扮悊璁轟笂鐨勬瀬闄? <li>浠繪剰欏哄簭錛氳繖浜涚畻娉曡窡姣旇緝欏哄簭娌″叧緋伙紙渚嬪錛氱┓涓炬硶錛?/li> </ol> </div> <div>涓浜涗富瑕佺畻娉曠殑綆鍗曚粙緇嶅涓嬶細</div> <div><br></div> <div><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: bold">浠庡乏鍒板彸</span></div> <div>閲囩敤鍝堝笇錛屽彲浠ュ緢瀹規槗鍦ㄥぇ閮ㄥ垎鎯呭喌涓嬮伩鍏嶄簩嬈℃瘮杈冿紝閫氳繃鍚堢悊鐨勫亣璁撅紝榪欑綆楁硶鏄嚎鎬ф椂闂村鏉傚害鐨勩傚畠鏈鍏堢敱Harrison鎻愬嚭錛岃屽悗鐢盞arp鍜孯abin鍏ㄩ潰鍒嗘瀽錛岀О涓篕R綆楁硶銆?/div> <div>鍦ㄥ亣璁炬ā寮忛暱搴︿笉澶т簬鏈哄櫒瀛楅暱鏃訛紝Shift-Or綆楁硶鏄緢楂樻晥鐨勫尮閰嶇畻娉曪紝鍚屾椂瀹冨彲浠ュ緢瀹規槗鎵╁睍鍒版ā緋婂尮閰嶄笂銆?/div> <div>MP鏄涓涓嚎鎬ф椂闂寸畻娉曪紝闅忓悗琚敼榪涗負KMP錛屽畠鐨勫尮閰嶆柟寮忓緢綾諱技浜庤嚜鍔ㄦ満鐨勮瘑鍒繃紼嬶紝鏂囨湰鐨勬瘡涓瓧絎︿笌妯″紡鐨勬瘡涓瓧絎︽瘮杈冧笉浼氳秴榪噇og<span id="hvzpftn" class=Apple-style-span style="VERTICAL-ALIGN: sub">Φ</span>(m+1)錛岃繖閲?#934;鏄粍閲戝垎闅旀瘮1.618錛岃岄殢鍚庡彂鐜扮殑綾諱技綆楁硶鈥斺擲imon綆楁硶錛屼嬌寰楁枃鏈殑姣忎釜瀛楃姣旇緝涓嶈秴榪?+log<span id="hvzpftn" class=Apple-style-span style="VERTICAL-ALIGN: sub">2</span>m錛岃繖涓夌綆楁硶鍦ㄦ渶鍧忔儏鍐典笅閮藉彧瑕?n-1嬈℃瘮杈冦傦紙<span id="hvzpftn" class=Apple-style-span style="COLOR: rgb(51,51,153)">鎶辨瓑闄愪簬鎴戠殑姘村鉤榪欎竴孌墊棦娌$湅鎳備篃娌¤兘鏌ヨ瘉錛屽ぇ瀹跺氨鐪嬩釜鎰忔濆惂</span>錛?/div> <div>鍩轟簬紜畾鎬ф湁闄愯嚜鍔ㄦ満鐨勭畻娉曞鏂囨湰瀛楃鍒氬ソ鍙敤n嬈¤闂紝浣嗘槸瀹冮渶瑕侀澶栫殑<span id="hvzpftn" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">O(mσ)</span>鐨勭┖闂淬?/div> <div>涓縐嶅彨Forward Dawg Matching鐨勭畻娉曞悓鏍蜂篃鍙敤n嬈¤闂紝瀹冧嬌鐢ㄤ簡妯″紡鐨勫悗緙鑷姩鏈恒?/div> <div>Apostolico-Crochemore綆楁硶鏄竴縐嶇畝鍗曠畻娉曪紝鏈鍧忔儏鍐典笅涔熷彧闇瑕?n/2嬈℃瘮杈冦?br></div> <div>榪樻湁涓縐嶄笉閭d箞騫肩錛圢ot So Naive錛夌殑綆楁硶錛屾渶鍧忔儏鍐典笅鏄痭騫蟲柟錛屼絾鏄澶勭悊榪囩▼鐨勬椂闂村拰絀洪棿鍧囦負甯告暟錛岃屼笖騫沖潎鎯呭喌涓嬬殑鎬ц兘闈炲父鎺ヨ繎綰挎с?/div> <div><br></div> <div><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: bold">浠庡彸鍒板乏</span></div> <div>BM綆楁硶琚涓烘槸閫氬父搴旂敤涓渶鏈夋晥鐜囩殑綆楁硶浜嗭紝瀹冩垨鑰呭畠鐨勭畝鍖栫増鏈父鐢ㄤ簬鏂囨湰緙栬緫鍣ㄤ腑鐨勬悳绱㈠拰鏇挎崲鍔熻兘錛屽浜庨潪鍛ㄦ湡鎬х殑妯″紡鑰岃█錛?n鏄繖縐嶇畻娉曠殑姣旇緝嬈℃暟涓婄晫浜嗭紝涓嶈繃瀵逛簬鍛ㄦ湡鎬фā寮忥紝瀹冩渶鍧忔儏鍐典笅闇瑕乶鐨勪簩嬈℃柟銆?/div> <div>BM綆楁硶鐨勪竴浜涘彉縐嶉伩鍏嶄簡鍘熺畻娉曠殑浜屾鏂歸棶棰橈紝姣旇緝楂樻晥鐨勬湁錛欰postolico and Giancarlo綆楁硶銆乀urbo BM綆楁硶鍜孯everse Colussi綆楁硶銆?/div> <div>瀹為獙鐨勭粨鏋滆〃鏄庯紝Quick Search綆楁硶錛圔M鐨勪竴涓彉縐嶏級浠ュ強鍩轟簬鍚庣紑鑷姩鏈虹殑Reverse Factor鍜孴urbo Reverse Factor綆楁硶綆楁槸瀹炶返涓渶鏈夋晥鐨勭畻娉曚簡銆?br></div> <div>Zhu and Takaoka綆楁硶鍜孊R綆楁硶涔熸槸BM鐨勫彉縐嶏紝瀹冧滑鍒欓渶瑕?span class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">O(σ</span><span id="hvzpftn" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'"><span id="hvzpftn" class=Apple-style-span style="VERTICAL-ALIGN: super">2</span></span><span id="hvzpftn" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">)</span>鐨勯澶栫┖闂淬?/div> <div><br></div> <div><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: bold">鐗規畩欏哄簭</span></div> <div>鏈鍏堣揪鍒扮┖闂寸嚎鎬ф渶浼樼殑鏄疓alil-Seiferas鍜孴wo Way綆楁硶錛屽畠浠妸妯″紡鍒嗕負涓ら儴鍒嗭紝鍏堜粠宸﹀埌鍙蟲悳绱㈠彸杈圭殑閮ㄥ垎錛屽鏋滄病鏈夊け閰嶏紝鍐嶆悳绱㈠乏杈圭殑閮ㄥ垎銆?/div> <div>Colussi鍜孏alil-Giancarlo綆楁硶灝嗘ā寮忎綅緗垎涓轟袱涓瓙闆嗭紝鍏堜粠宸﹁嚦鍙蟲悳绱㈢涓涓瓙闆嗭紝濡傛灉娌℃湁澶遍厤錛屽啀鎼滅儲鍓╀笅鐨勩侰olussi綆楁硶浣滀負KMP綆楁硶鐨勬敼榪涳紝浣垮緱鏈鍧忔儏鍐典笅鍙渶瑕?n/2嬈℃瘮杈冿紝鑰孏alil-Giancarlo綆楁硶鍒欓氳繃鏀硅繘Colussi綆楁硶鐨勪竴涓壒孌婃儏鍐碉紝鎶婃渶鍧忔瘮杈冩鏁板噺灝戝埌浜?n/3銆?/div> <div>鏈浣沖け閰嶅拰M鏈澶т綅縐葷畻娉曞垎鍒牴鎹ā寮忕殑瀛楃棰戠巼鍜岄瀛椾綅縐伙紝瀵規ā寮忎綅緗繘琛屾帓搴忋?br></div> <div>Skip Search錛孠MP Skip Search鍜孉lpha Skip Search綆楁硶榪愮敤“妗?#8221;鐨勬柟娉曟潵鍐沖畾妯″紡鐨勮搗濮嬩綅緗?br></div> <div><br></div> <div><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: bold">浠繪剰欏哄簭</span></div> <div><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: bold"><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: normal">Horspool綆楁硶涔熸槸BM鐨勪竴涓彉縐嶏紝瀹冧嬌鐢ㄤ竴縐嶇Щ浣嶅嚱鏁幫紝鑰屼笌瀛楃姣旇緝欏哄簭涓嶇浉騫層傝繕鏈夊叾浠栫殑鍙樼濡傦細</span><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: normal">Quick Search綆楁硶錛?/span><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: normal">Tuned Boyer-Moore綆楁硶錛?/span><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: normal">Smith綆楁硶錛?/span><span id="hvzpftn" class=Apple-style-span style="FONT-WEIGHT: normal">Raita綆楁硶銆?/span><br></span></div> <div><br></div> <div>鍦ㄦ帴涓嬫潵鐨勭珷鑺備腑錛屾垜浠細緇欏嚭涓婇潰榪欎簺綆楁硶鐨勫疄鐜般傛垜浠妸瀛楁瘝琛ㄩ檺瀹氫負ASCII鐮佹垨鑰呭畠鐨勪換鎰忓瓙闆嗭紝緙栫▼璇█鐢–錛岃繖灝辨剰鍛崇潃鏁扮粍绱㈠紩鏄粠0寮濮嬶紝鑰屽瓧絎︿覆浠ULL緇撳熬銆?/div> <div><br></div> <div>錛?span class=Apple-style-span style="COLOR: rgb(51,51,153)">絎竴绔犲畬銆傚ソ鍍忚繖浜涚畻娉曡鎸ㄤ釜澶鎬簡涓亶錛屽弽鑰屼笉鐭ラ亾璇ラ夊摢涓縐嶄簡錛岃佸浠嬬粛鍒漢鐨勪笢瑗挎椂灝辨槸榪欐牱錛屽敖鏉ヨ櫄鐨勩?/span>錛?/div> <img src ="http://m.shnenglu.com/tgh621/aggbug/66593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2008-11-11 13:05 <a href="http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟粈涔?char** 涓嶈兘鑷姩杞寲涓?const char** (杞? http://m.shnenglu.com/tgh621/archive/2008/11/11/66588.html澶ф搗澶ф搗Tue, 11 Nov 2008 03:23:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66588.htmlhttp://m.shnenglu.com/tgh621/comments/66588.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66588.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/66588.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66588.html

涓嬈″伓鐒剁殑鎯呭喌涓嬫垜鍙戠幇浠ヤ笅浠g爜绔熺劧鏃犳硶琚紪璇戦氳繃錛堝鏋滀綘鐨勭紪璇戝櫒錛屾瘮濡俈C6鎴朧C2003錛屽厑璁稿畠緙栬瘧閫氳繃錛屾垜鎯充綘棣栧厛搴旇鎹釜緙栬瘧鍣紝姣斿GCC鎴朧C2005錛夛細
void foo( const char* [] ) { }
int main( void )
{
    char* s[2];
    foo( s );
}

綆鍖栨垚鏇翠竴鑸殑褰㈠紡鏄細
char** p1 = 0;
const char** p2 = p1;

閿欒鏄細invalid conversion from `char**' to `const char**'.

lostpencil鏇村姞浠旂粏錛屼嬌鐢–緙栬瘧鍣ㄧ粰鍑虹殑鏄竴涓鍛婏細
initialization from incompatible pointer type.

闅忓悗hpho緇欏嚭浜嗗悎鐞嗙殑瑙i噴錛屽悓鏃?a target=_blank>comp.lang.c++.moderated涓婄殑Ulrich Eckhardt涔熺敤浠g爜榪涜浜嗚鏄庛?/p>

鐢ㄤ唬鐮佹潵璇存槑鏈鐩磋浜嗭細
const char* s = "abc";
int main( void )
{
    char* p0 = 0;
    char** p1 = &p0;
    const char** p2 = p1;
// 鍏堝亣璁捐繖涓鍙ユ槸鍚堟硶鐨?( 嫻嬭瘯鏃訛紝鍙互鍏堝己鍒剁被鍨?strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">杞?/strong>鍖栦竴涓?)
    *p2 = s;
    *p0 = 'A';
// 閫氳繃p0鍦ㄤ慨鏀逛笉搴旇琚慨鏀圭殑s錛岃繖鏄劇劧鍜?strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">const鐩歌繚鑳岋紝鍏惰繍琛岀粨鏋滀笉鍙煡銆?br>}




鐪嬩簡 **鐨?鎯沖埌鐨?br>tekyDec 29, 2005 -  Show original item

鐪嬪畬鍚?鏄庣櫧**璁茬殑涓轟粈涔?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">char** 涓嶈兘鑷姩杞?/strong>鍖栦負 const char**,(鍘熸枃)浣嗗鎴戝獎鍝嶆渶娣辯殑鏄笅闈㈢殑璇?

==================================================================
char *p="abc" 鑳戒笉鑳界紪璇戦氳繃瑕佺湅浣犱嬌鐢ㄧ殑緙栬瘧鍣ㄣ傞壌浜庡ぇ閲忛仐鐣欎唬鐮佺殑瀛樺湪錛屽ぇ閮ㄥ垎緙栬瘧鍣ㄥ厑璁稿叾閫氳繃錛屾垨鑰呯粰涓鍛娿傚綋鐒訛紝紼嬪簭鍛樿嚜宸卞繀欏諱繚璇佺粷涓嶅幓淇敼鍏跺箋?

紼嬪簭鍛樹笉搴旇鍦ㄤ唬鐮佷腑鍑虹幇*p='A'榪欐牱鐨勮鍙ャ傝繖鏄綋鍒濈害瀹氬ソ浜嗙殑錛氱紪璇戝櫒鍏佽char *p="abc"閫氳繃錛岃岀▼搴忓憳淇濊瘉涓嶅幓淇敼瀹冦?
b. *p='A'緙栬瘧鏃跺簲璇ュ厑璁擱氳繃錛屽洜涓哄崟灝辮繖鏉¤鍙ヨ岃█錛屽畠瀹屽叏鍚堟硶銆?
c. 榪愯鏃?p='A'鑳戒笉鑳介氳繃瑕佺湅瀹為檯鐨勮繍琛岀幆澧冿紝鍖呮嫭浣犱嬌鐢ㄧ殑鎿嶄綔緋葷粺銆佺紪璇戝櫒銆佺紪璇戝櫒閫夐」 絳夌瓑錛屼竴鍙ヨ瘽錛屽叾榪愯緇撴灉鐢變笉寰椾綘錛屼笖涓嶅簲璇ョ敱浣犲幓鍏沖績錛屽洜涓鴻繖縐嶈涓烘湰韜凡緇忚繚鍙嶇害瀹氫簡銆?
==================================================================

宸ヤ綔鍏崇郴鍚?鐢–String 鍜宻tring鐢ㄧ殑澶浜?寰堝皯榪欐牱瀹氫箟瀛楃涓?char *p=“abcde“浜?br>鍖濅竴鐪?榪樹笉閫傚簲,:(,娓愭笎鐨勫洖鎯蟲墠鎯寵搗涓浜涙潵(鍝?榪樻槸澶敓鐤?璧跺揩鍐欎笅鏉?浠ュ悗鍒繕浜?

榪欐牱瀹氫箟鐨勫瓧絎︿覆char *p=“abcde“ ; char *p1=“123445667“;

姝e涓婇潰鎻愬埌鐨勬槸涓嶈兘鍐?*p='A',榪愯鐨勬椂鍊欎細鍑洪敊,鍚屾牱,strcpy(p,p1)涔熶細鍑洪敊鍝?

"abcde"瀛楃涓插彲浠ョ湅鍋氭槸涓父閲忓瓧絎︿覆浜?鏄笉鑳借淇敼鐨?

浣嗗鏋?char p[]=“abcde“ 榪欐牱瀹氫箟,灝辨病鏈夐棶棰?浣犲彲浠ヤ慨鏀?p='A',鍙涓嶈秺鐣屽氨ok.

騫朵笖鍙戠幇榪欐牱涓ょ瀹氫箟
char *p=“abcde“

char p[]=“abcde“

鍦ㄨ繍琛岀殑鏃跺?p鎸囧悜鐨勫湴鍧涔熶笉鏄竴鏍風殑,鍙char *p=“abcde“榪樻槸鏈夌壒孌婄殑澶勭悊 :),鍏蜂綋鎬庝箞澶勭悊灝變笉鐭ラ亾浜?楂樻墜璇鋒寚鏁?)


闅忕潃嫻嬭瘯,鍙堝彂鐜頒釜闂,鍙兘鏄釜鑰侀棶棰樹簡鍚?


int main(int argc, char* argv[])
{
 int t[10];
 char p1[7]="123456";
 const char *p2="1234567890123213123";
 
 int len(0);
 
  //*p1='C';  err

 len=strlen(p1);
 printf("%d\n",len);
 
 strcpy(p1,p2);   ///??????????
 
 printf("%s\n",p1);
 
 len=strlen(p1);
 
 printf("%d\n",len);
 return 0;
}

鎴戝畾涔夌殑鏄?涓瓧絎︽暟緇? 浣嗙敤strcpy鎶妏2鎷峰埌p1涓?p1鏄斁涓嶄笅鐨?浣嗙▼搴忓嵈姝e父鎵ц,warning ,err閮芥病鏈?榪愯涔熸甯?


杈撳嚭

6
1234567890123213123
19

搴旇鏄嬌鐢ㄥ唴瀛樿秺鐣屼簡闃??鎬庝箞浼氭甯歌繍琛屽憿?

闅鵑亾瀵逛簬鍐呭瓨瓚婄晫鐨勪嬌鐢?榪愭皵濂芥墠宕╂簝琛ㄧ幇鍑烘潵,榪愭皵涓嶅ソ灝辨甯歌繍琛??

posted on 2006-02-22 13:04 Vincent.Chen 闃呰(232) 璇勮(0)  緙栬緫  鏀惰棌 鎵灞炲垎綾? 鏉?/font>



澶ф搗 2008-11-11 11:23 鍙戣〃璇勮
]]>[ 杞琞C++綾誨瀷杞崲絎︾殑浣跨敤 http://m.shnenglu.com/tgh621/archive/2008/09/27/62926.html澶ф搗澶ф搗Sat, 27 Sep 2008 10:13:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/27/62926.htmlhttp://m.shnenglu.com/tgh621/comments/62926.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/27/62926.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62926.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62926.htmlC++鐨勫洓涓被鍨嬭漿鎹㈣繍綆楃宸茬粡鏈夊緢涔呬簡,浣嗕竴鐩存病鏈夊紕娓呮瀹冧滑鐨勭敤娉?浠婂ぉ鐪嬪埌涓鏈功涓婄殑瑙i噴,鎵嶅ぇ鑷村湴鐨勪簡瑙d簡鍏跺叿浣撶殑鐢ㄦ硶.

鍏蜂綋褰掔撼濡備笅:

reinterpret_cast

璇ュ嚱鏁板皢涓涓被鍨嬬殑鎸囬拡杞崲涓哄彟涓涓被鍨嬬殑鎸囬拡.
榪欑杞崲涓嶇敤淇敼鎸囬拡鍙橀噺鍊煎瓨鏀炬牸寮?涓嶆敼鍙樻寚閽堝彉閲忓?,鍙渶鍦ㄧ紪璇戞椂閲嶆柊瑙i噴鎸囬拡鐨勭被鍨嬪氨鍙仛鍒?
reinterpret_cast 鍙互灝嗘寚閽堝艱漿鎹負涓涓暣鍨嬫暟,浣嗕笉鑳界敤浜庨潪鎸囬拡綾誨瀷鐨勮漿鎹?
渚?
//鍩烘湰綾誨瀷鎸囬拡鐨勭被鍨嬭漿鎹?br>double d=9.2;
double* pd = &d;
int *pi = reinterpret_cast<int*>(pd);  //鐩稿綋浜巌nt *pi = (int*)pd;

//涓嶇浉鍏崇殑綾葷殑鎸囬拡鐨勭被鍨嬭漿鎹?br>class A{};
class B{};
A* pa = new A;
B* pb = reinterpret_cast<B*>(pa);   //鐩稿綋浜嶣* pb = (B*)pa;

//鎸囬拡杞崲涓烘暣鏁?br>long l = reinterpret_cast<long>(pi);   //鐩稿綋浜巐ong l = (long)pi;


const_cast

璇ュ嚱鏁扮敤浜庡幓闄ゆ寚閽堝彉閲忕殑甯擱噺灞炴э紝灝嗗畠杞崲涓轟竴涓搴旀寚閽堢被鍨嬬殑鏅氬彉閲忋傚弽榪囨潵錛屼篃鍙互灝嗕竴涓潪甯擱噺鐨勬寚閽堝彉閲忚漿鎹負涓涓父鎸囬拡鍙橀噺銆?br>榪欑杞崲鏄湪緙栬瘧鏈熼棿鍋氬嚭鐨勭被鍨嬫洿鏀廣?br>渚嬶細
const int* pci = 0;
int* pk = const_cast<int*>(pci);  //鐩稿綋浜巌nt* pk = (int*)pci;

const A* pca = new A;
A* pa = const_cast<A*>(pca);     //鐩稿綋浜嶢* pa = (A*)pca;

鍑轟簬瀹夊叏鎬ц冭檻錛宑onst_cast鏃犳硶灝嗛潪鎸囬拡鐨勫父閲忚漿鎹負鏅氬彉閲忋?/p>


static_cast

璇ュ嚱鏁頒富瑕佺敤浜庡熀鏈被鍨嬩箣闂村拰鍏鋒湁緇ф壙鍏崇郴鐨勭被鍨嬩箣闂寸殑杞崲銆?br>榪欑杞崲涓鑸細鏇存敼鍙橀噺鐨勫唴閮ㄨ〃紺烘柟寮忥紝鍥犳錛宻tatic_cast搴旂敤浜庢寚閽堢被鍨嬭漿鎹㈡病鏈夊お澶ф剰涔夈?br>渚嬶細
//鍩烘湰綾誨瀷杞崲
int i=0;
double d = static_cast<double>(i);  //鐩稿綋浜?double d = (double)i;

//杞崲緇ф壙綾葷殑瀵硅薄涓哄熀綾誨璞?br>class Base{};
class Derived : public Base{};
Derived d;
Base b = static_cast<Base>(d);     //鐩稿綋浜?Base b = (Base)d;


dynamic_cast

瀹冧笌static_cast鐩稿錛屾槸鍔ㄦ佽漿鎹€?br>榪欑杞崲鏄湪榪愯鏃惰繘琛岃漿鎹㈠垎鏋愮殑錛屽茍闈炲湪緙栬瘧鏃惰繘琛岋紝鏄庢樉鍖哄埆浜庝笂闈笁涓被鍨嬭漿鎹㈡搷浣溿?br>璇ュ嚱鏁板彧鑳藉湪緇ф壙綾誨璞$殑鎸囬拡涔嬮棿鎴栧紩鐢ㄤ箣闂磋繘琛岀被鍨嬭漿鎹€傝繘琛岃漿鎹㈡椂錛屼細鏍規嵁褰撳墠榪愯鏃剁被鍨嬩俊鎭紝鍒ゆ柇綾誨瀷瀵硅薄涔嬮棿鐨勮漿鎹㈡槸鍚﹀悎娉曘俤ynamic_cast鐨勬寚閽堣漿鎹㈠け璐ワ紝鍙氳繃鏄惁涓簄ull媯嫻嬶紝寮曠敤杞崲澶辮觸鍒欐姏鍑轟竴涓猙ad_cast寮傚父銆?br>渚嬶細
class Base{};
class Derived : public Base{};

//媧劇敓綾繪寚閽堣漿鎹負鍩虹被鎸囬拡
Derived *pd = new Derived;
Base *pb = dynamic_cast<Base*>(pd);

if (!pb)
 cout << "綾誨瀷杞崲澶辮觸" << endl;

//娌℃湁緇ф壙鍏崇郴錛屼絾琚漿鎹㈢被鏈夎櫄鍑芥暟
class A(virtual ~A();)   //鏈夎櫄鍑芥暟
class B{}:
A* pa = new A;
B* pb  = dynamic_cast<B*>(pa);

濡傛灉瀵規棤緇ф壙鍏崇郴鎴栬呮病鏈夎櫄鍑芥暟鐨勫璞℃寚閽堣繘琛岃漿鎹€佸熀鏈被鍨嬫寚閽堣漿鎹互鍙婂熀綾繪寚閽堣漿鎹負媧劇敓綾繪寚閽堬紝閮戒笉鑳介氳繃緙栬瘧銆?br>



澶ф搗 2008-09-27 18:13 鍙戣〃璇勮
]]>
UNICODE涓茶漿鎹㈡垚char綾誨瀷涓茬殑鍥涚鏂規硶[杞琞http://m.shnenglu.com/tgh621/archive/2008/09/27/62924.html澶ф搗澶ф搗Sat, 27 Sep 2008 10:11:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/27/62924.htmlhttp://m.shnenglu.com/tgh621/comments/62924.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/27/62924.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62924.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62924.html1. 璋冪敤 WideCharToMultiByte() API

int WideCharToMultiByte (
    UINT    CodePage,                
//1 Unicode緙栫爜鐨勫瓧絎﹂〉錛孶nicode緙栫爜鏈夊瓧絎﹂〉鐨勬蹇碉紝姣斿gb2312/936錛宐ig5/950絳?/span>
    DWORD   dwFlags,                //2 濡備綍澶勭悊澶嶅悎unicode瀛楃錛岃緇嗘煡google
    LPCWSTR lpWideCharStr,        //3 寰呰漿鎹㈢殑unicode涓?/span>
    int     cchWideChar,                //4 琛ㄧず鍙傛暟3鐨勯暱搴?nbsp; 浼犻?1琛ㄧず浠?x00緇撳熬
    LPSTR   lpMultiByteStr,            //5 鎺ュ彈杞崲鍚庣殑涓茬殑瀛楃緙撳啿
    int     cbMultiByte,                    //6 琛ㄧず鍙傛暟5lpMutiByteStr鐨勫瓧鑺傚ぇ灝?nbsp;閫氬父sizeof涓涓?/span>
    LPCSTR  lpDefaultChar,        //7 NULL 鍏蜂綋google
    LPBOOL  lpUsedDefaultChar//8 NULL 鍏蜂綋google
);

2. 璋冪敤CRT鍑芥暟wcstombs()

size_t wcstombs (
    
char*          mbstr,
    
const wchar_t* wcstr,
    size_t         count );

3. 浣跨敤CString鏋勯犲櫒鎴栬祴鍊兼搷浣?/p>

// 鍋囪鏈変竴涓猆nicode涓瞱szSomeString

CString str1 ( wszSomeString ); 
// 鐢ㄦ瀯閫犲櫒杞崲
CString str2;

str2 
= wszSomeString; // 鐢ㄨ祴鍊兼搷浣滆漿鎹?/span>

4. 浣跨敤ATL涓茶漿鎹㈠畯

#include <atlconv.h>

// 榪樻槸鍋囪鏈変竴涓猆nicode涓瞱szSomeString

{
    
char szANSIString [MAX_PATH];
    USES_CONVERSION; 
// 澹版槑榪欎釜瀹忚浣跨敤鐨勫眬閮ㄥ彉閲?/span>

    lstrcpy ( szANSIString, OLE2A(wszSomeString) );
}



澶ф搗 2008-09-27 18:11 鍙戣〃璇勮
]]>
C++铏氬嚱鏁拌〃瑙f瀽(杞? http://m.shnenglu.com/tgh621/archive/2008/09/18/62212.html澶ф搗澶ф搗Thu, 18 Sep 2008 10:54:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/18/62212.htmlhttp://m.shnenglu.com/tgh621/comments/62212.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/18/62212.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62212.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62212.html

C++涓殑铏氬嚱鏁扮殑浣滅敤涓昏鏄疄鐜頒簡澶氭佺殑鏈哄埗銆傚叧浜庡鎬侊紝綆鑰岃█涔嬪氨鏄敤鐖剁被鍨嬪埆鐨勬寚閽堟寚鍚戝叾瀛愮被鐨勫疄渚嬶紝鐒跺悗閫氳繃鐖剁被鐨勬寚閽堣皟鐢ㄥ疄闄呭瓙綾葷殑鎴愬憳鍑芥暟銆傝繖縐嶆妧鏈彲浠ヨ鐖剁被鐨勬寚閽堟湁“澶氱褰㈡?#8221;錛岃繖鏄竴縐嶆硾鍨嬫妧鏈傛墍璋撴硾鍨嬫妧鏈紝璇寸櫧浜嗗氨鏄瘯鍥句嬌鐢ㄤ笉鍙樼殑浠g爜鏉ュ疄鐜板彲鍙樼殑綆楁硶銆傛瘮濡傦細妯℃澘鎶鏈紝RTTI鎶鏈紝铏氬嚱鏁版妧鏈紝瑕佷箞鏄瘯鍥懼仛鍒板湪緙栬瘧鏃跺喅璁紝瑕佷箞璇曞浘鍋氬埌榪愯鏃跺喅璁?

鍏充簬铏氬嚱鏁扮殑浣跨敤鏂規硶錛屾垜鍦ㄨ繖閲屼笉鍋氳繃澶氱殑闃愯堪銆傚ぇ瀹跺彲浠ョ湅鐪嬬浉鍏崇殑C++鐨勪功綾嶃傚湪榪欑瘒鏂囩珷涓紝鎴戝彧鎯充粠铏氬嚱鏁扮殑瀹炵幇鏈哄埗涓婇潰涓哄ぇ瀹?涓涓竻鏅扮殑鍓栨瀽銆?

褰撶劧錛岀浉鍚岀殑鏂囩珷鍦ㄧ綉涓婁篃鍑虹幇榪囦竴浜涗簡錛屼絾鎴戞繪劅瑙夎繖浜涙枃绔犱笉鏄緢瀹規槗闃呰錛屽ぇ孌靛ぇ孌電殑浠g爜錛屾病鏈夊浘鐗囷紝娌℃湁璇︾粏鐨勮鏄庯紝娌℃湁姣旇緝錛屾病鏈変婦涓鍙嶄笁銆備笉鍒╀簬瀛︿範鍜岄槄璇伙紝鎵浠ヨ繖鏄垜鎯沖啓涓嬭繖綃囨枃绔犵殑鍘熷洜銆備篃甯屾湜澶у澶氱粰鎴戞彁鎰忚銆?

璦褰掓浼狅紝璁╂垜浠竴璧瘋繘鍏ヨ櫄鍑芥暟鐨勪笘鐣屻?

铏氬嚱鏁拌〃

瀵笴++ 浜嗚В鐨勪漢閮藉簲璇ョ煡閬撹櫄鍑芥暟錛圴irtual Function錛夋槸閫氳繃涓寮犺櫄鍑芥暟琛紙Virtual Table錛夋潵瀹炵幇鐨勩傜畝縐頒負V-Table銆?鍦ㄨ繖涓〃涓紝涓繪槸瑕佷竴涓被鐨勮櫄鍑芥暟鐨勫湴鍧琛紝榪欏紶琛ㄨВ鍐充簡緇ф壙銆佽鐩栫殑闂錛屼繚璇佸叾瀹圭湡瀹炲弽搴斿疄闄呯殑鍑芥暟銆傝繖鏍鳳紝鍦ㄦ湁铏氬嚱鏁扮殑綾葷殑瀹炰緥涓繖涓〃琚垎閰嶅湪浜?榪欎釜瀹炰緥鐨勫唴瀛樹腑錛屾墍浠ワ紝褰撴垜浠敤鐖剁被鐨勬寚閽堟潵鎿嶄綔涓涓瓙綾葷殑鏃跺欙紝榪欏紶铏氬嚱鏁拌〃灝辨樉寰楃敱涓洪噸瑕佷簡錛屽畠灝卞儚涓涓湴鍥句竴鏍鳳紝鎸囨槑浜嗗疄闄呮墍搴旇璋冪敤鐨勫嚱鏁般?

榪欓噷鎴戜滑鐫閲嶇湅涓涓嬭繖寮犺櫄鍑芥暟琛ㄣ傚湪C++鐨勬爣鍑嗚鏍艱鏄庝功涓鍒幫紝緙栬瘧鍣ㄥ繀闇瑕佷繚璇佽櫄鍑芥暟琛ㄧ殑鎸囬拡瀛樺湪浜庡璞″疄渚嬩腑鏈鍓嶉潰鐨勪綅緗紙榪欐槸涓轟簡淇濊瘉姝g‘鍙栧埌铏氬嚱鏁扮殑鍋忕Щ閲忥級銆?榪欐剰鍛崇潃鎴戜滑閫氳繃瀵硅薄瀹炰緥鐨勫湴鍧寰楀埌榪欏紶铏氬嚱鏁拌〃錛岀劧鍚庡氨鍙互閬嶅巻鍏朵腑鍑芥暟鎸囬拡錛屽茍璋冪敤鐩稿簲鐨勫嚱鏁般?

鍚垜鎵簡閭d箞澶氾紝鎴戝彲浠ユ劅瑙夊嚭鏉ヤ綘鐜板湪鍙兘姣斾互鍓嶆洿鍔犳檿澶磋漿鍚戜簡銆?娌″叧緋伙紝涓嬮潰灝辨槸瀹為檯鐨勪緥瀛愶紝鐩鎬俊鑱槑鐨勪綘涓鐪嬪氨鏄庣櫧浜嗐?

鍋囪鎴戜滑鏈夎繖鏍風殑涓涓被錛?

class Base {

public:

virtual void f() { cout << "Base::f" << endl; }

virtual void g() { cout << "Base::g" << endl; }

virtual void h() { cout << "Base::h" << endl; }

};

鎸夌収涓婇潰鐨勮娉曪紝鎴戜滑鍙互閫氳繃Base鐨勫疄渚嬫潵寰楀埌铏氬嚱鏁拌〃銆?涓嬮潰鏄疄闄呬緥紼嬶細

typedef void(*Fun)(void);

Base b;

Fun pFun = NULL;

cout << "铏氬嚱鏁拌〃鍦板潃錛? << (int*)(&b) << endl;

cout << "铏氬嚱鏁拌〃 鈥?絎竴涓嚱鏁板湴鍧錛? << (int*)*(int*)(&b) << endl;

// Invoke the first virtual function

pFun = (Fun)*((int*)*(int*)(&b));

pFun();

瀹為檯榪愯緇忔灉濡備笅錛?Windows XP+VS2003, Linux 2.6.22 + GCC 4.1.3)

铏氬嚱鏁拌〃鍦板潃錛?012FED4

铏氬嚱鏁拌〃 鈥?絎竴涓嚱鏁板湴鍧錛?044F148

Base::f

閫氳繃榪欎釜紺轟緥錛屾垜浠彲浠ョ湅鍒幫紝鎴戜滑鍙互閫氳繃寮鴻鎶?amp;b杞垚int *錛屽彇寰楄櫄鍑芥暟琛ㄧ殑鍦板潃錛岀劧鍚庯紝鍐嶆鍙栧潃灝卞彲浠ュ緱鍒扮涓涓櫄鍑芥暟鐨勫湴鍧浜嗭紝涔熷氨鏄疊ase::f()錛岃繖鍦ㄤ笂闈㈢殑紼嬪簭涓緱鍒頒簡楠岃瘉錛堟妸int* 寮哄埗杞垚浜嗗嚱鏁版寚閽堬級銆傞氳繃榪欎釜紺轟緥錛屾垜浠氨鍙互鐭ラ亾濡傛灉瑕佽皟鐢˙ase::g()鍜孊ase::h()錛屽叾浠g爜濡備笅錛?

(Fun)*((int*)*(int*)(&b)+0); // Base::f()

(Fun)*((int*)*(int*)(&b)+1); // Base::g()

(Fun)*((int*)*(int*)(&b)+2); // Base::h()

榪欎釜鏃跺欎綘搴旇鎳備簡鍚с備粈涔堬紵榪樻槸鏈夌偣鏅曘備篃鏄紝榪欐牱鐨勪唬鐮佺湅鐫澶貢浜嗐傛病闂錛岃鎴戠敾涓浘瑙i噴涓涓嬨傚涓嬫墍紺猴細

娉ㄦ剰錛氬湪涓婇潰榪欎釜鍥句腑錛屾垜鍦ㄨ櫄鍑芥暟琛ㄧ殑鏈鍚庡鍔犱簡涓涓粨鐐癸紝榪欐槸铏氬嚱鏁拌〃鐨勭粨鏉熺粨鐐癸紝灝卞儚瀛楃涓茬殑緇撴潫絎?#8220;\0”涓鏍鳳紝鍏舵爣蹇椾簡铏氬嚱鏁拌〃鐨勭粨鏉熴傝繖涓粨鏉熸爣蹇楃殑鍊煎湪涓嶅悓鐨勭紪璇戝櫒涓嬫槸涓嶅悓鐨勩傚湪WinXP+VS2003涓嬶紝榪欎釜鍊兼槸NULL銆傝屽湪Ubuntu 7.10 + Linux 2.6.22 + GCC 4.1.3涓嬶紝榪欎釜鍊兼槸濡傛灉1錛岃〃紺鴻繕鏈変笅涓涓櫄鍑芥暟琛紝濡傛灉鍊兼槸0錛岃〃紺烘槸鏈鍚庝竴涓櫄鍑芥暟琛ㄣ?

涓嬮潰錛屾垜灝嗗垎鍒鏄?#8220;鏃犺鐩?#8221;鍜?#8220;鏈夎鐩?#8221;鏃剁殑铏氬嚱鏁拌〃鐨勬牱瀛愩傛病鏈夎鐩栫埗綾葷殑铏氬嚱鏁版槸姣棤鎰忎箟鐨勩傛垜涔嬫墍浠ヨ璁茶堪娌℃湁瑕嗙洊鐨勬儏鍐碉紝涓昏鐩殑鏄負浜嗙粰涓涓姣斻傚湪姣旇緝涔嬩笅錛屾垜浠彲浠ユ洿鍔犳竻妤氬湴鐭ラ亾鍏跺唴閮ㄧ殑鍏蜂綋瀹炵幇銆?

涓鑸戶鎵匡紙鏃犺櫄鍑芥暟瑕嗙洊錛?/h3>

涓嬮潰錛屽啀璁╂垜浠潵鐪嬬湅緇ф壙鏃剁殑铏氬嚱鏁拌〃鏄粈涔堟牱鐨勩傚亣璁炬湁濡備笅鎵紺虹殑涓涓戶鎵垮叧緋伙細

璇鋒敞鎰忥紝鍦ㄨ繖涓戶鎵垮叧緋諱腑錛屽瓙綾繪病鏈夐噸杞戒換浣曠埗綾葷殑鍑芥暟銆傞偅涔堬紝鍦ㄦ淳鐢熺被鐨勫疄渚嬩腑錛屽叾铏氬嚱鏁拌〃濡備笅鎵紺猴細

瀵逛簬瀹炰緥錛欴erive d; 鐨勮櫄鍑芥暟琛ㄥ涓嬶細

鎴戜滑鍙互鐪嬪埌涓嬮潰鍑犵偣錛?

1錛夎櫄鍑芥暟鎸夌収鍏跺0鏄庨『搴忔斁浜庤〃涓?

2錛夌埗綾葷殑铏氬嚱鏁板湪瀛愮被鐨勮櫄鍑芥暟鍓嶉潰銆?

鎴戠浉淇¤仾鏄庣殑浣犱竴瀹氬彲浠ュ弬鑰冨墠闈㈢殑閭d釜紼嬪簭錛屾潵緙栧啓涓孌電▼搴忔潵楠岃瘉銆?

涓鑸戶鎵匡紙鏈夎櫄鍑芥暟瑕嗙洊錛?/h3>

瑕嗙洊鐖剁被鐨勮櫄鍑芥暟鏄緢鏄劇劧鐨勪簨鎯咃紝涓嶇劧錛岃櫄鍑芥暟灝卞彉寰楁鏃犳剰涔夈備笅闈紝鎴戜滑鏉ョ湅涓涓嬶紝濡傛灉瀛愮被涓湁铏氬嚱鏁伴噸杞戒簡鐖剁被鐨勮櫄鍑芥暟錛屼細鏄竴涓粈涔堟牱瀛愶紵鍋囪錛屾垜浠湁涓嬮潰榪欐牱鐨勪竴涓戶鎵垮叧緋匯?

涓轟簡璁╁ぇ瀹剁湅鍒拌緇ф壙榪囧悗鐨勬晥鏋滐紝鍦ㄨ繖涓被鐨勮璁′腑錛屾垜鍙鐩栦簡鐖剁被鐨勪竴涓嚱鏁幫細f()銆傞偅涔堬紝瀵逛簬媧劇敓綾葷殑瀹炰緥錛屽叾铏氬嚱鏁拌〃浼氭槸涓嬮潰鐨勪竴涓牱瀛愶細

鎴戜滑浠庤〃涓彲浠ョ湅鍒頒笅闈㈠嚑鐐癸紝

1錛夎鐩栫殑f()鍑芥暟琚斁鍒頒簡铏氳〃涓師鏉ョ埗綾昏櫄鍑芥暟鐨勪綅緗?

2錛夋病鏈夎瑕嗙洊鐨勫嚱鏁頒緷鏃с?

榪欐牱錛屾垜浠氨鍙互鐪嬪埌瀵逛簬涓嬮潰榪欐牱鐨勭▼搴忥紝

Base *b = new Derive();

b->f();

鐢眀鎵鎸囩殑鍐呭瓨涓殑铏氬嚱鏁拌〃鐨刦()鐨勪綅緗凡緇忚Derive::f()鍑芥暟鍦板潃鎵鍙栦唬錛屼簬鏄湪瀹為檯璋冪敤鍙戠敓鏃訛紝鏄疍erive::f()琚皟鐢ㄤ簡銆傝繖灝卞疄鐜頒簡澶氭併?

澶氶噸緇ф壙錛堟棤铏氬嚱鏁拌鐩栵級

涓嬮潰錛屽啀璁╂垜浠潵鐪嬬湅澶氶噸緇ф壙涓殑鎯呭喌錛屽亣璁炬湁涓嬮潰榪欐牱涓涓被鐨勭戶鎵垮叧緋匯傛敞鎰忥細瀛愮被騫舵病鏈夎鐩栫埗綾葷殑鍑芥暟銆?

瀵逛簬瀛愮被瀹炰緥涓殑铏氬嚱鏁拌〃錛屾槸涓嬮潰榪欎釜鏍峰瓙錛?

鎴戜滑鍙互鐪嬪埌錛?

1錛?姣忎釜鐖剁被閮芥湁鑷繁鐨勮櫄琛ㄣ?

2錛?瀛愮被鐨勬垚鍛樺嚱鏁拌鏀懼埌浜嗙涓涓埗綾葷殑琛ㄤ腑銆傦紙鎵璋撶殑絎竴涓埗綾繪槸鎸夌収澹版槑欏哄簭鏉ュ垽鏂殑錛?

榪欐牱鍋氬氨鏄負浜嗚В鍐充笉鍚岀殑鐖剁被綾誨瀷鐨勬寚閽堟寚鍚戝悓涓涓瓙綾誨疄渚嬶紝鑰岃兘澶熻皟鐢ㄥ埌瀹為檯鐨勫嚱鏁般?

澶氶噸緇ф壙錛堟湁铏氬嚱鏁拌鐩栵級

涓嬮潰鎴戜滑鍐嶆潵鐪嬬湅錛屽鏋滃彂鐢熻櫄鍑芥暟瑕嗙洊鐨勬儏鍐點?

涓嬪浘涓紝鎴戜滑鍦ㄥ瓙綾諱腑瑕嗙洊浜嗙埗綾葷殑f()鍑芥暟銆?

涓嬮潰鏄浜庡瓙綾誨疄渚嬩腑鐨勮櫄鍑芥暟琛ㄧ殑鍥撅細

鎴戜滑鍙互鐪嬭錛屼笁涓埗綾昏櫄鍑芥暟琛ㄤ腑鐨刦()鐨勪綅緗鏇挎崲鎴愪簡瀛愮被鐨勫嚱鏁版寚閽堛傝繖鏍鳳紝鎴戜滑灝卞彲浠ヤ換涓闈欐佺被鍨嬬殑鐖剁被鏉ユ寚鍚戝瓙綾伙紝騫惰皟鐢ㄥ瓙綾葷殑f()浜嗐傚錛?

Derive d;

Base1 *b1 = &d;

Base2 *b2 = &d;

Base3 *b3 = &d;

b1->f(); //Derive::f()

b2->f(); //Derive::f()

b3->f(); //Derive::f()

b1->g(); //Base1::g()

b2->g(); //Base2::g()

b3->g(); //Base3::g()

瀹夊叏鎬?/h3>

姣忔鍐機++鐨勬枃绔狅紝鎬誨厤涓嶄簡瑕佹壒鍒や竴涓婥++銆傝繖綃囨枃绔犱篃涓嶄緥澶栥傞氳繃涓婇潰鐨勮榪幫紝鐩鎬俊鎴戜滑瀵硅櫄鍑芥暟琛ㄦ湁涓涓瘮杈冪粏鑷寸殑浜嗚В浜嗐傛按鍙澆鑸燂紝浜﹀彲瑕嗚垷銆備笅闈紝璁╂垜浠潵鐪嬬湅鎴戜滑鍙互鐢ㄨ櫄鍑芥暟琛ㄦ潵騫茬偣浠涔堝潖浜嬪惂銆?

涓銆侀氳繃鐖剁被鍨嬬殑鎸囬拡璁塊棶瀛愮被鑷繁鐨勮櫄鍑芥暟

鎴戜滑鐭ラ亾錛屽瓙綾繪病鏈夐噸杞界埗綾葷殑铏氬嚱鏁版槸涓浠舵鏃犳剰涔夌殑浜嬫儏銆傚洜涓哄鎬佷篃鏄鍩轟簬鍑芥暟閲嶈澆鐨勩傝櫧鐒跺湪涓婇潰鐨勫浘涓垜浠彲浠ョ湅鍒癇ase1鐨勮櫄琛ㄤ腑鏈塂erive鐨勮櫄鍑芥暟錛屼絾鎴戜滑鏍規湰涓嶅彲鑳戒嬌鐢ㄤ笅闈㈢殑璇彞鏉ヨ皟鐢ㄥ瓙綾葷殑鑷湁铏氬嚱鏁幫細

Base1 *b1 = new Derive();

b1->f1(); //緙栬瘧鍑洪敊

浠諱綍濡勫浘浣跨敤鐖剁被鎸囬拡鎯寵皟鐢ㄥ瓙綾諱腑鐨?strong>鏈鐩栫埗綾葷殑鎴愬憳鍑芥暟鐨勮涓洪兘浼氳緙栬瘧鍣ㄨ涓洪潪娉曪紝鎵浠ワ紝榪欐牱鐨勭▼搴忔牴鏈棤娉曠紪璇戦氳繃銆備絾鍦ㄨ繍琛屾椂錛屾垜浠彲浠ラ氳繃鎸囬拡鐨勬柟寮忚闂櫄鍑芥暟琛ㄦ潵杈懼埌榪濆弽C++璇箟鐨勮涓恒傦紙鍏充簬榪欐柟闈㈢殑灝濊瘯錛岄氳繃闃呰鍚庨潰闄勫綍鐨勪唬鐮侊紝鐩鎬俊浣犲彲浠ュ仛鍒拌繖涓鐐癸級

浜屻佽闂畁on-public鐨勮櫄鍑芥暟

鍙﹀錛屽鏋滅埗綾葷殑铏氬嚱鏁版槸private鎴栨槸protected鐨勶紝浣嗚繖浜涢潪public鐨勮櫄鍑芥暟鍚屾牱浼氬瓨鍦ㄤ簬铏氬嚱鏁拌〃涓紝鎵浠ワ紝鎴戜滑鍚屾牱鍙互浣跨敤璁塊棶铏氬嚱鏁拌〃鐨勬柟寮忔潵璁塊棶榪欎簺non-public鐨勮櫄鍑芥暟錛岃繖鏄緢瀹規槗鍋氬埌鐨勩?

濡傦細

class Base {

private:

virtual void f() { cout << "Base::f" << endl; }

};

class Derive : public Base{

};

typedef void(*Fun)(void);

void main() {

Derive d;

Fun pFun = (Fun)*((int*)*(int*)(&d)+0);

pFun();

}

緇撴潫璇?/h3>

C++榪欓棬璇█鏄竴闂∕agic鐨勮璦錛屽浜庣▼搴忓憳鏉ヨ錛屾垜浠技涔庢案榪滄懜涓嶆竻妤氳繖闂ㄨ璦鑳岀潃鎴戜滑鍦ㄥ共浜嗕粈涔堛傞渶瑕佺啛鎮夎繖闂ㄨ璦錛屾垜浠氨蹇呴渶瑕佷簡瑙++閲岄潰鐨勯偅浜涗笢瑗匡紝闇瑕佸幓浜嗚ВC++涓偅浜涘嵄闄╃殑涓滆タ銆備笉鐒訛紝榪欐槸涓縐嶆惉璧風煶澶寸牳鑷繁鑴氱殑緙栫▼璇█銆?/p>



澶ф搗 2008-09-18 18:54 鍙戣〃璇勮
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲激情网站免费观看| 欧美一区激情视频在线观看| 亚洲欧美精品suv| 亚洲精品之草原avav久久| 一色屋精品视频在线看| 一区二区在线视频播放| 亚洲高清视频一区二区| 亚洲精品日韩欧美| 亚洲特黄一级片| 欧美一区影院| 老司机一区二区三区| 亚洲高清资源综合久久精品| 最新国产の精品合集bt伙计| 日韩一区二区精品在线观看| 午夜精品999| 久久精品色图| 欧美人成在线| 国产亚洲午夜| 夜夜爽www精品| 久久九九国产精品| 亚洲精品中文字幕女同| 亚洲精品在线观看免费| 亚洲欧美日韩直播| 欧美电影在线| 亚洲欧美乱综合| 免费高清在线视频一区·| 亚洲国产成人av| 国产一区再线| 欧美在线视频播放| 欧美激情精品久久久六区热门 | 一区二区三区视频在线 | 亚洲欧洲一区二区三区| 亚洲一区欧美一区| 欧美精品在线一区二区| 国内精品国产成人| 亚洲天堂成人在线观看| 欧美激情麻豆| 伊人成人开心激情综合网| 久久全球大尺度高清视频| 欧美视频免费在线| 在线日韩av片| 久久精品五月婷婷| 亚洲深夜福利在线| 欧美久久久久久蜜桃| 亚洲高清不卡在线| 久久综合婷婷| 香蕉亚洲视频| 国产精品美女一区二区在线观看| 日韩一级精品视频在线观看| 模特精品裸拍一区| 久久久777| 极品裸体白嫩激情啪啪国产精品| 午夜精品久久久久久久99水蜜桃| 亚洲国产精品专区久久| 狼人天天伊人久久| 在线成人www免费观看视频| 久久精品二区三区| 欧美一区二区在线免费播放| 国产欧美日韩免费| 香蕉久久夜色精品国产| 亚洲欧美不卡| 亚洲美女av网站| 欧美成在线观看| 日韩视频在线一区二区三区| 亚洲欧洲另类国产综合| 欧美激情第1页| 一区二区久久久久久| 99视频精品| 国产精品网站在线观看| 久久精品最新地址| 久久中文精品| 一本久久综合| 亚洲欧美电影在线观看| 国产一区二区高清不卡| 久久综合伊人77777| 欧美电影打屁股sp| 这里只有精品丝袜| 午夜欧美大尺度福利影院在线看| 国产亚洲欧美一区二区三区| 久久亚洲精品一区二区| 欧美激情一区二区三区在线视频 | 欧美老女人xx| 亚洲欧美视频一区| 久久精品国产第一区二区三区最新章节 | 亚洲国产成人在线| 欧美日韩综合在线免费观看| 久久av一区二区三区| 久久夜色精品国产噜噜av| 日韩视频永久免费| 亚洲特黄一级片| 亚洲国产高清在线观看视频| 日韩视频在线一区二区| 国产一区二区三区四区五区美女| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精选中文字幕| 日韩一二三在线视频播| 国产免费成人av| 亚洲电影免费观看高清| 国产精品久久77777| 久久综合中文| 欧美亚州一区二区三区| 免费观看成人www动漫视频| 欧美国产先锋| 久久国产精品第一页| 欧美成人综合| 久久亚洲精选| 亚洲三级色网| 国产一区二区精品丝袜| 亚洲精品久久久久久久久久久久久 | 亚洲国产精品电影| 国产精品久久久免费| 模特精品裸拍一区| 国产精品一区二区三区免费观看 | 欧美激情在线观看| 国产精品日韩一区二区| 亚洲国产另类精品专区| 国产亚洲精品综合一区91| 亚洲另类视频| 亚洲激情小视频| 久久久久久免费| 久久www免费人成看片高清| 欧美激情综合在线| 欧美承认网站| 国产综合色产在线精品| 亚洲色图综合久久| 在线亚洲一区| 欧美日韩国语| 亚洲精品免费观看| 日韩视频在线播放| 欧美黄色aaaa| 亚洲人成人77777线观看| 亚洲高清不卡一区| 久久亚洲综合色一区二区三区| 国产精品久久久久久久久久尿| 亚洲人成7777| 亚洲天堂免费观看| 欧美性色综合| 亚洲视屏在线播放| 亚洲综合色丁香婷婷六月图片| 欧美激情中文不卡| 一二美女精品欧洲| 中文欧美日韩| 国产精品高潮呻吟久久av黑人| 一本色道久久88综合亚洲精品ⅰ| 一本久久a久久精品亚洲| 欧美日韩久久不卡| 99在线精品视频在线观看| 99热这里只有精品8| 欧美日韩国产成人在线免费| 99国产精品自拍| 亚洲欧美大片| 国产农村妇女精品| 欧美淫片网站| 免费观看30秒视频久久| 日韩亚洲精品电影| 欧美三级第一页| 亚洲综合国产| 久久一区二区精品| 亚洲欧洲三级电影| 欧美日韩四区| 欧美亚洲免费在线| 免费在线欧美视频| 99综合精品| 国产农村妇女毛片精品久久莱园子 | 欧美激情中文字幕一区二区| 亚洲毛片在线观看.| 午夜在线观看免费一区| 黄色成人在线| 欧美理论电影在线观看| 亚洲午夜一区| 蜜臀久久99精品久久久画质超高清 | 亚洲精品视频一区| 午夜一区二区三区在线观看| 海角社区69精品视频| 欧美精品电影| 欧美在线观看视频在线 | 午夜精品久久久久久| 136国产福利精品导航网址应用| 欧美国产一区视频在线观看| 一区二区三区 在线观看视频| 久久精品视频免费| aaa亚洲精品一二三区| 国产日韩欧美三级| 欧美精品综合| 久久亚洲二区| 日韩一级大片在线| 国产一区二区三区高清在线观看 | 91久久线看在观草草青青| 国产精品高潮视频| 免费观看一级特黄欧美大片| 午夜日韩在线观看| 亚洲精品视频在线| 欧美特黄a级高清免费大片a级| 亚洲人成在线播放| 久久久免费av| 亚洲欧美日韩另类| 亚洲精品视频一区二区三区| 好看的亚洲午夜视频在线| 国产精品专区一| 欧美日韩在线播放一区|