锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美中文字幕在线,午夜精品影院,亚洲电影在线播放http://m.shnenglu.com/zqsand/archive/2011/08/21/154016.htmlrikisandrikisandSun, 21 Aug 2011 08:19:00 GMThttp://m.shnenglu.com/zqsand/archive/2011/08/21/154016.htmlhttp://m.shnenglu.com/zqsand/comments/154016.htmlhttp://m.shnenglu.com/zqsand/archive/2011/08/21/154016.html#Feedback2http://m.shnenglu.com/zqsand/comments/commentRss/154016.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/154016.htmlBasic Sample Senario :

Client 闇瑕佷竴縐嶇粍浠舵彁渚涗竴縐?FastString綾伙紝 姝ょ被鍏鋒湁 int length() 鏂規硶

瑙e喅鏂規錛?/font>

闈欐侀摼鎺?錛?緇勪歡鍘傚晢灝嗘簮浠g爜浜ょ粰 client 錛屽鎴峰皢緇勪歡浠g爜涓巆lient 浠g爜緙栬瘧榪炴帴榪愯銆?濡傛灉緇勪歡浠g爜闇瑕乫ix bug or update 錛屽垯client 绔唬鐮侀渶瑕侀噸鏂扮紪璇戣繛鎺ャ?鑰屼笖client杞歡鐨勪笉鍚屽疄渚嬩嬌鐢ㄥ悇鑷殑緇勪歡鍐呭瓨瀵硅薄銆?/font>

鍔ㄦ侀摼鎺?錛?緇勪歡鍘傚晢浣跨敤DLL褰㈠紡鍙戞斁緇勪歡錛屾鏃朵笉鍚岀殑client瀹炰緥鍙互鍏變韓緇勪歡鍦ㄥ唴瀛樹腑鐨勪唬鐮佹銆?/font>

DLL鐨勯棶棰橈細1.瀵煎嚭鍚嶇О鐨勯棶棰?錛?涓嶅悓鐨刢ompiler鍙互浣跨敤涓嶅悓鐨刴angle name 鐢ㄦ潵鍖哄垎 c++鐨勫嚱鏁幫紝閭d箞浣跨敤涓嶅悓鐨刢ompiler鐨刢lient鍜岀粍浠舵棤娉曢摼鎺?錛堝彲浠ヤ嬌鐢╡xtern 鈥淐鈥濊В鍐沖叏灞鍑芥暟鍚嶇殑闂錛屼嬌鐢?.DEF鏂囦歡瑙e喅瀵煎嚭鎴愬憳鍑芥暟鐨勯棶棰橈級

                   2.鍗囩駭鐨勯棶棰?錛氬鏋滅粍浠舵渶鍒濆畾涔変負

class FastString
{
    char* m_psz;
public:
    FastString(const char* psz){strcpy(m_psz, psz);}
};

                                          鑰屽悗鍘傚晢鏇存敼浜嗙粍浠剁殑瀹炵幇

class FastString
{
int newmember;
char* psz;
public:

FastString(const char* psz){strcpy(m_psz, psz);}

}

鍘熸潵FastString瀵硅薄澶у皬涓?瀛楄妭錛岀幇鍦ㄥ彉涓?瀛楄妭錛屼絾鏄痗lient绔寜鐓?瀛楄妭鍒嗛厤瀵硅薄錛?dll鍗磋鍚戝悗闈㈢殑4涓瓧鑺傚瓨鍏ヤ竴涓寚閽堬紝琛屼負涓嶅彲棰勬枡錛?/font>

瑙e喅榪欎竴闂鐨勪竴縐嶆柟娉曚究鏄瘡嬈″彂甯冧究鏇存敼dll鐨勫悕瀛楋紝鍗?.0, 2.0, x.0 絳夌瓑銆備絾榪欐牱姣旇緝寮卞晩錛侊紒

榪欑闂鏍規湰鍘熷洜鏄暐鍛紵

class 鐨勫叧閿湪浜庡皝瑁呬簡鍏朵腑鐨勫疄鐜扮粏鑺傦紝鍗崇敤鎴風煡閬撶被鎻愪緵浜嗗摢浜涙湇鍔★紙 public鏂規硶錛夊氨琛屼簡錛屼笉闇瑕佺綾葷殑鍐呴儴鍒板簳浣跨敤浜嗗摢浜涙垚鍛樺彉閲忋傝繖鏍蜂竴鏉ワ紝鍙鎺ュ彛娌″彉錛堢被鎻愪緵鍔熻兘錛夛紝user灝卞彲浠ュ畨蹇冪殑浣跨敤浠繪剰鐗堟湰鐨勫疄鐜頒簡銆侰++鎬庝箞涓嶈鍛紵C++鍛婅瘔鐢ㄦ埛鎺ュ彛鐨勫悓鏃訛紝涔熷憡璇変簡鐢ㄦ埛綾葷殑瀹炵幇(瀵硅薄甯冨眬)銆傛瘮濡傜被瀵硅薄鏈夊澶у晩錛屾瘡涓垚鍛樼殑鍋忕Щ鍟?鍏蜂綋鍙互鐪婭nside c++ object model)銆傜煡閬撲簡榪欎簺錛屽鎴風浣跨敤鎺ュ彛鐨勪唬鐮佸氨鍜孌LL涓殑鍏蜂綋瀹炵幇绱у瘑鐨勮﹀悎璧鋒潵浜嗭紝鏉叿 鍟妦

鍜嬪姙鍛紵 鍙涓嶈client鐩存帴鍒涘緩FastString灝辮浜嗭紝榪欐牱client鐨勪唬鐮佸氨涓嶄細鍙楀埌FastString瀹炵幇鍙樺寲鐨勫獎鍝嶄簡銆傜粰FastString鍔犱竴涓猈rapper綾伙紝鍐呴儴宓屽涓涓狥astString錛屾墍鏈夊FastString鐨勮皟鐢ㄩ兘foward緇欏唴閮ㄧ殑FastString member, 鍒涘緩FastString 鐨勪換鍔″湪dll鏂歸潰瀹屾垚錛宑lient鍙煡閬揥rapper澶у皬涓?涓瓧鑺?-鎸囧悜FastString鐨勬寚閽堛傝繖鏍烽棶棰樿В鍐充簡錛屼絾鏄お楹葷儲浜嗭紝鎵鏈夌殑鎺ュ彛閮借鍖呬竴灞?! 鑰屼笖澶氫簡涓灞傝皟鐢?

榪樻湁鍟ュ姙娉曚箞錛?涓轟簡淇濊瘉c++鎺ュ彛綾誨疄鐜頒簩榪涘埗綰у埆鐨勫吋瀹瑰彧鑳戒嬌鐢ㄧ紪璇戝櫒鏃犲叧鐨勭壒鎬э細1.鍋囪澶嶅悎綾誨瀷琛ㄧ幇褰㈠紡鐩稿悓(struct) 2. 浼犲弬欏哄簭鐩稿悓錛屽彲浠ヤ嬌鐢ㄦ寚紺虹鎸囧畾3.铏氬嚱鏁拌皟鐢ㄦ満鍒剁浉鍚岋紝鍗沖熀浜?vtbl 鍜?vptr. 鍩轟簬榪欎簺鍋囪錛屾垜浠垱寤虹殑c++鎺ュ彛綾繪墍鏈夊嚱鏁拌緗負铏氬嚱鏁幫紝閭d箞涓嶅悓compiler灝嗕負瀹㈡埛绔柟娉曡皟鐢ㄤ駭鐢熺浉鍚岀殑鏈哄櫒浠g爜銆傚畾涔変簡鎺ュ彛錛屼究瑙勫畾浜嗘墍鏈夌戶鎵夸簬浠栫殑綾葷殑鍐呭瓨緇撴瀯涓瀹氫笌瀹冨吋瀹廣備絾姝ゆ椂涓嶈兘鍛婅瘔鐢ㄦ埛綾葷殑瀹氫箟錛屽惁鍒欓噸鍥炰笂闈㈢殑鑰佽礬涓婁簡銆傛庝箞鍔烇紝鍙湁鎺ュ彛瀹㈡埛鏃犳硶鍒涘緩綾葷殑瀹氫箟錛屽彧鏈塭xport涓涓垱寤虹被瀵硅薄鐨勫嚱鏁板鎴蜂簡銆?nbsp; 鍚屼笂闈㈢殑wrapper涓鏍鳳紝鍒涘緩綾葷殑鎿嶄綔浠呬粎鍦╠ll鍐呴儴璋冪敤錛岃繖鎰忓懗鐫瀹為檯寤洪犵被瀵硅薄澶у皬鍜屽竷灞鐨勪唬鐮佷笌緙栬瘧瀹炵幇綾葷殑鏂規硶鐨勪唬鐮佷嬌鐢ㄥ悓鏍風殑緙栬瘧鍣ㄥ垱寤?錛堝嵆ctor鍜宑all ctor鐨勪唬鐮佺敱鍚屼竴緙栬瘧鍣ㄥ悓鏃剁紪璇戯級銆傜敱浜庤櫄鏋愭瀯鍑芥暟鍦╲tbl鐨勪綅緗笌compiler鐩稿叧錛屾墍浠ヤ笉鑳芥妸瀹冭緗負铏氬嚱鏁幫紝鍙湁鏄劇ず澧炲姞涓涓狣elete鍑芥暟瀹屾垚鏋愭瀯宸ヤ綔銆?/font>

OK錛屽綋鍓嶆垜浠緱鍒扮殑DLL涓彧鏈夊垱寤虹被瀵硅薄鐨勫嚱鏁伴渶瑕佺敤extern 鈥淐鈥漞xport 緇欏鎴鳳紝鍏朵粬鐨勬帴鍙d腑鐨勮櫄鍑芥暟鏄氳繃铏氳〃璁塊棶鐨勶紝鏃犻渶闈犵鍙峰悕瀛楅摼鎺ャ?/font>

榪涗竴姝ョ殑錛屽鏋滄垜浠緇欐帴鍙e鍔犱竴涓姛鑳藉憿錛?濡傛灉鐩存帴鍦ㄧ幇鏈夋帴鍙d腑鏂規硶澹版槑鍚庡姞鍏ユ柊鐨?font color="#86bc43">鏂規硶錛岄偅涔堟鏂規硶浼氬嚭鐜板湪vtbl鐨勬渶鍚庝竴鏍忥紝鏃х殑client涓嶄細璋冪敤鏂版柟娉曪紝浣嗘槸濡傛灉鏂扮殑client璁塊棶鑰佺殑瀵硅薄鍛? 涓嶅垢鐨勪簨鎯呭彂鐢熶簡錛?榪欐牱鍋氱殑闂鍦ㄤ簬錛屼慨鏀瑰叕寮鐨勬帴鍙e氨鎵撶牬浜嗗璞$殑灝佽鎬с?/font>

閭d箞澧炲姞鎺ュ彛鍔熻兘鍙兘閫氳繃璁捐涓涓帴鍙g戶鎵垮彟涓涓帴鍙o紝鎴栬呰綾葷戶鎵垮涓帴鍙f潵瀹炵幇浜嗐傚鎴峰彲浠ュ湪榪愯鏃墮氳繃RTTI鏉ヨ闂璞★紝鏀寔榪欎釜鍔熻兘涓嶏紝浜詫紵鐒惰?錛孯TTI涔熸槸涓涓猚ompiler鐩稿叧鐨勪笢涓滐紝濂藉惂錛屾垜浠姣忎釜綾昏嚜宸卞疄鐜癛TTI錛屼篃灝辨槸瀹炵幇涓涓猟ynamic_cast 鏂規硶錛?鐢ㄦ潵灝嗚嚜宸眂ast鎴愪負鑷繁瀹炵幇鐨勬帴鍙o紝濡傛灉涓嶆敮鎸佸垯榪斿洖 0 銆?/font>

渚嬪錛?/font>

void* CFastString::Dynamic_Cast(const char* pszTypename)
{
void * pRev;
if(strcmp(pszTypename, "IFastString") == 0)
{
pRev = static_cast<IFastString*>(this);
}
else if(strcmp(pszTypename , "IOut") == 0)
{
pRev = static_cast<IOut*>(this);
}
else if(strcmp(pszTypename , "IExtent") == 0)
{
pRev = static_cast<IFastString*>(this);
}
else
{
return 0;
}

return pRev;
}

娉ㄦ剰cast鍒癐Extent鐨勬椂鍊欑敤浜咺FastString錛屽洜涓篒FastString 鍜?IOut閮芥槸浠嶪Extent緇ф壙鐨勶紝鍐橧Extent鐨勮瘽涓嶇煡閬撶敤鍝釜錛岀敤铏氭嫙緇ф壙鍙互浣緾FastString瀵硅薄鍙湁涓浠絀Extent錛屼負鍟ヤ笉鐢ㄥ憿錛?浣犳噦寰椼傘傘傝窡鍓嶉潰絳旀涓鏍鳳紝緙栬瘧鍣ㄧ浉鍏熾?/font>

鏈鍚庝竴涓棶棰樻槸delete鐨勯棶棰橈紝鐢ㄦ埛闇瑕佽寰椾負姣忎竴涓璞¤皟鐢ㄤ竴嬈elete鏂規硶錛岃屾寚閽坈ast鏉ast鍘伙紝鎯寵寰楀璞¤delete娌℃湁寰堥毦鍟婏紒 鎬庝箞鍔烇紵 鐢ㄥ紩鐢ㄨ鏁板惂錛屾妸姣忎釜鎸囬拡褰撳仛鍏鋒湁鐢熷懡鍛ㄦ湡鐨勫疄浣擄紝鍒涘緩鏃跺欒鏁?+錛岄攢姣佹椂鍊?-錛岀瓑鍒?鐨勬椂鍊欏氨delete瀵硅薄銆?/font>

澶у姛鍛婃垚錛岄氳繃vptr鍜寁tbl鐨勪簩榪涘埗闃茬伀澧欙紝鎴戜滑鍋氬埌浜嗗彲閲嶇敤鐨勪簩榪涘埗緇勪歡錛岀粍浠跺彉鍖栧鎴鋒棤闇閲嶆柊緙栬瘧 銆?/font>



rikisand 2011-08-21 16:19 鍙戣〃璇勮
]]>
win鏍稿績緙栫▼-Chap17-Memory-Mapped Fileshttp://m.shnenglu.com/zqsand/archive/2010/05/26/116409.htmlrikisandrikisandWed, 26 May 2010 09:48:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/05/26/116409.htmlhttp://m.shnenglu.com/zqsand/comments/116409.htmlhttp://m.shnenglu.com/zqsand/archive/2010/05/26/116409.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/116409.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/116409.html浠涔堟椂鍊欑敤memory-mapped files:

1.System use it to load and execute .exe and dll files.

2.Use memory-mapped files to access a data file on disk.

3.allow multiple processes running on the same machine to share data with each other.

------------------------------------------------------------------------------------------------------

鐢ㄩ斾竴錛氫嬌鐢╩apping file executables and dlls

褰撹皟鐢╟reateProcess鏃跺欙紝緋葷粺鍋氫簡浠ヤ笅鐨勪簨鎯?

1.locates CreateProcess 涓寚瀹氱殑the .exe file錛屽け璐ュ垯return false

2.鍒涘緩鏂扮殑process kernel object

3.creates a private address space for new process

4.reserves a region of address space large enough to contain the .exe file.The desired location of this region is specified by the .exe file itself.by default ,base address is 0x00400000 .You can change it by create your app .exe fiel using linker鈥檚 /BASE option.

5.the systems notes that the physical storage baking the reserved region is in the .exe file on disk instread of the system鈥檚 paging file.(緋葷粺娉ㄦ剰鍒幫紝鏀寔宸蹭繚鐣欏尯鍩熺殑鐗╃悊瀛樺偍鍖哄煙鏄湪紓佺洏涓婄殑.exe 鏂囦歡鑰屼笉鏄湪緋葷粺欏甸潰涓?

褰撱俥xe 琚玬apped into the process address space錛岀郴緇熻闂?exe鐨勪竴涓尯鍩燂紝閭i噷鍒楀嚭浜?exe鍚湁鐨刣ll錛岀劧鍚庣郴緇熷埄鐢?LoadLibrary for each dlls銆傜郴緇焟ap dll鏃跺欙紝濡傛灉dll鐨?preferred base address 琚崰鎹垨鑰呬笉澶熷ぇ錛宒llwill try to find another region of address space to reserve for the dll銆傚鏋渄ll 琚瀹氫簡/Fixed when it build,涔熷氨鏄笉鏀寔閲嶅畾浣嶏紝閭d箞鍔犺澆澶辮觸銆?/font>

濡傛灉鍔犺澆dll鎴栬卐xe 澶辮觸錛屽脊鍑哄璇濇騫朵笖閲婃斁鐢寵鐨勫湴鍧絀洪棿銆?/font>

after all .exe  dll mapped into the process address space, system can begin exec the .exe file starup code. the sys takes care of all paging,buffering, and caching. 渚嬪錛屽鏋滀竴孌典唬鐮佽闂簡涓涓茍涓嶅湪涓誨瓨鐨勫湴鍧錛岄偅涔堜竴涓敊璇駭鐢燂紝緋葷粺瀵熻鍒伴敊璇茍涓旇嚜鍔ㄧ殑璋冨叆page of code from the files image into a page of RAM銆?/font>

the sys maps the page of ram to the proper location in the process address and allows the thread  to continue.

褰撲負涓涓猘pp鍒涘緩絎簩涓疄渚嬫椂錛岀郴緇熷彧鏄畝鍗曠殑鎵撳紑鍙﹀涓涓猰emory-mapped view  of file-mapping object that identifies the exec files image and create a new process object and a new thread object.鍒╃敤鍐呭瓨鏄犲皠鏂囦歡錛屽涓疄渚嬪彲浠ュ叡浜唬鐮佸拰鏁版嵁銆傚疄闄呬笂錛宖ile 鏄垎涓哄涓猻ection 錛屽涓妭鍧囧榻愪簬欏佃竟鐣屻傚鏋滀竴涓猧nstance of the app 淇敼浜嗗叏灞鍙橀噺錛岀郴緇熷簲鐢ㄤ簡copy-on-write 鏈哄埗錛屽鍒朵慨鏀圭殑欏甸潰錛屽茍鏇存柊瀹炰緥鐨刦ile-mapping view銆傚綋鎴戜滑璋冭瘯紼嬪簭鏃跺悓鏍風殑浜嬫儏浼氬彂鐢燂紝debuger modify code錛宻ys use cow again銆?/font>

褰撲竴涓繘紼嬭鍔犺澆錛岀郴緇熸鏌ュ叾鎵鏈夋槧灝勬枃浠墮〉,緋葷粺灝嗘墍鏈夐氬父鐢╟ow淇濇姢鐨勯〉闈㈡彁浜ょ粰瀛樺偍緋葷粺錛岃繖浜涢〉闈粎浠呮槸琚彁浜わ紝褰撴枃浠惰璁塊棶鐨勬椂鍊欙紝緋葷粺璇誨叆鐩稿簲鐨勯〉闈紝濡傛灉欏甸潰娌℃湁琚慨鏀癸紝閭d箞浠栦滑鍙互琚崲鍑猴紝濡傛灉宸茬粡淇敼錛岀郴緇熷皢淇敼榪囩殑欏甸潰杞叆宸茬粡鎻愪氦鐨勯〉闈箣涓(榪欑偣寰堟櫐娑╁晩 system swaps the modified page to one of the perviously committed pages in the paging file ,鎬庝箞緲昏瘧鍛~~~ 錛氾紙   )

------------------------------------------------------------------------------------------------------

鍦ㄥ彲鎵ц鏂囦歡鎴栬卍ll涓叡浜潤鎬佸彉閲?/font>

------------------------------------------------------------------------------------------------------

鍐呭瓨鏄犲皠鏁版嵁鏂囦歡

渚嬪瓙錛氳鎶婁竴涓枃浠舵墍鏈夊瓧鑺傚掔疆

濡傛灉鍒╃敤file mapping 鎴戜滑鍛婅瘔緋葷粺浣跨敤涓涓櫄鎷熺┖闂寸殑鍖哄煙鏉ュ掔疆鏂囦歡錛岀劧鍚庡憡璇夋妸鏂囦歡鐨勭涓涓瓧鑺傛槧灝勫埌淇濈暀絀洪棿鐨勭涓涓瓧鑺傦紝鐒跺悗灝卞儚澶勭悊鍐呭瓨涓殑瀛楃涓蹭竴鏍峰鐞嗘枃浠跺嵆鍙紝寮曟枃緋葷粺浼氬府鍔╀綘瀹屾垚鏂囦歡緙撳瓨浠ュ強璋冮〉絳夊伐浣溿?/font>

浣跨敤嫻佺▼錛?/font>

1.鍒涘緩涓涓猣ile kernel object that identifies the file on disk that you want to use as a memory 鈥搈apped file

2.鍒涘緩涓涓猣ile mapping kernel object 鍛婅瘔緋葷粺鏂囦歡鐨勫ぇ灝忥紝浠ュ強浣犲噯澶囧浣曡闂枃浠?/font>

3.鍛婅瘔緋葷粺map all鎴栬呴儴鍒嗘枃浠跺埌浣犵殑榪涚▼鍦板潃絀洪棿

褰撲嬌鐢ㄧ粨鏉熷悗瑕侊細

1鍛婅瘔緋葷粺 unmap file-mapping kernel object form your process add

2cloes filemapping kernel object

3close file kernel object

---------

鍏蜂綋姝ラ

--1. 鍒涘緩鏂囦歡鍐呮牳瀵硅薄

CreateFile

澶辮觸榪斿洖 INVALID_HANDLE_VALUE = 鈥? 涓鑸潵璇磜indows func 澶辮觸return null榪欎釜姣旇緝鐗規畩

createfile dwdesiredAccess 闇瑕佽緗負 GENERIC_READ 鎴栬?GENERIC_WRITE 

--2. 鍒涘緩file-mapping 鍐呮牳瀵硅薄

CreatefileMapping(HANDLE,PSECURITY_ATTRIBUTES,DWORD fdwProtect,DWORD dwMaximumsizeHigh,DWORD dwMaximumSizeLow,PCTSTR pszName);

絎竴涓弬鏁頒嬌鐢╟reatefile 榪斿洖鐨刪andle銆俻sa涓鑸嬌鐢ㄩ粯璁ull銆傚綋鍒涘緩涓涓猣ile mapping object 鏃跺欙紝緋葷粺騫朵笉浼?椹笂淇濈暀涓涓湴鍧絀洪棿錛岀劧鍚庡皢file鏄犲皠鍒拌繖涓尯鍩熴備絾寰坕錛屽綋緋葷粺map鏃跺欙紝緋葷粺蹇呴』鐭ラ亾涓簆hysical storage鍒嗛厤浠涔堟牱鐨勪繚鎶ゅ睘鎬э紝絎笁涓弬鏁版寚鏄庝簡榪欎簺銆?/font>

鍚庨潰涓や釜鍙傛暟鎸囨槑file鐨勫ぇ灝忥紝ensure  enouth physical storage is available for the file-mapping object.

high鎸囨槑楂?2浣嶏紝low鎸囨槑浣?2浣嶃傚鏋滄兂鍒涘緩涓涓弽搴旂幇鍦ㄦ枃浠跺ぇ灝忕殑map錛屽潎浼?.

pszName 鐢ㄤ簬涓庡叾瀹冭繘紼嬪叡浜唴瀛樻槧灝勬枃浠?/font>

--3.灝嗘枃浠舵暟鎹甿ap to process address space

浣跨敤榪欎釜鍑芥暟

PVOID MapViewOfFile(HANDLE hfileMappingObject,dwDesireaccess,dwFileOffsetHigh,dwFileOffsetLow,dwNumberOfbytestomap)

鏂囦歡娌″繀瑕佷竴嬈″叏鏄犲皠錛屼竴嬈℃槧灝勪竴閮ㄥ垎錛岃繖涓閮ㄥ垎鎴愪負涓涓獀iew

棣栧厛閫氳繃high鍜宭ow 鎸囧畾寮濮嬫槧灝勭殑瀛楄妭

鍏舵鏄寚瀹氭槧灝勫澶э紝0鍒欐槧灝勫埌鏂囦歡灝鵑儴銆?/font>

--4.unmapping the file data from the process address space

UnmapviewOfFile(PVOID pvBaseAdddress);

鍙傛暟浣跨敤mapview鐨勮繑鍥炲?/font>

濡傛灉寮哄埗write back to disk 鍒欎嬌鐢?FlushViewOfFile(PVOID pvAddress,SIZE_T dwNumberOfBytesToFlush)

絎竴涓湴鍧鏄兂瑕佸紑濮媐lush鐨勫湴鍧

--5.鍏抽棴filemapping object 浠ュ強file object

-----------------------------------------------------------------------------------

浣跨敤filemap 鍦ㄨ繘紼嬩箣闂村叡浜暟鎹?/font>

渚嬪瓙錛?/font>

app寮濮嬫椂鍊欙紝緋葷粺璋冪敤createfile to open .exe file onthe disk銆俿ys call creatFileMapping to create filemapping object.鐒跺悗緋葷粺璋冪敤  mapviewofffileEX (with sec_image flag to point out it is a pe file),So that the file鈥檚 image is mapped to the address of the first byte of exectuable code of this mapped view. System creates the primary thread , puts the address of the first byte of exec code of this mapped view in the thread instruction pointer,and then lets the cpu start exec the code.

If user 鍐嶅惎鍔ㄥ悓涓涓猘pp錛宻ys 鐪嬪埌file-mapping宸茬粡瀛樺湪浜嗭紝緋葷粺maps a view of file a second time錛宼his time in the context of the newly created process address space.

鍍忔墍鏈夊唴鏍稿璞′竴鏍鳳紝鏈変笁縐嶆柟娉曞叡浜粬錛岀戶鎵匡紝鍛藉悕瀵硅薄浠ュ強璧嬪糷andle銆?/font>

路路路欏墊枃浠舵敮鎸佺殑鍐呭瓨鏄犲皠鏂囦歡

璁稿搴旂敤紼嬪簭榪愯鏄駭鐢熸暟鎹渶瑕佸拰鍏朵粬榪涚▼鍏變韓濡傛灉蹇呴』鍦ㄧ‖鐩樺緩绔嬫枃浠舵墠鍙互鍏變韓錛岄偅涔堟晥鐜囧緢浣庛傚洜姝ゅ井杞彁渚涗簡鐢眘ystem paging file 鏀寔鐨?file mapping銆備笉闇瑕乧reatefile 錛屽彧闇瑕佸湪璋冪敤createFilemapping 鐨勬椂鍊欎紶榪涗竴涓?INVALID_HANDLE_VALUE 浣滀負hFile 鍙傛暟鍗沖彲銆?鏄犲皠鏂囦歡澶у皬鍚屾牱鏄敱high 鍜宭ow 鍙傛暟鍐沖畾鐨勩?/font>

`````紼鐤忔彁浜ょ殑鍐呭瓨鏄犲皠鏂囦歡

--鐪嬫潵闇瑕佹妸铏氭嫙鍐呭瓨閭g珷涓璧風湅鐪嬩簡~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



rikisand 2010-05-26 17:48 鍙戣〃璇勮
]]>
Google code jam Round1Bhttp://m.shnenglu.com/zqsand/archive/2010/05/25/116335.htmlrikisandrikisandTue, 25 May 2010 15:29:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/05/25/116335.htmlhttp://m.shnenglu.com/zqsand/comments/116335.htmlhttp://m.shnenglu.com/zqsand/archive/2010/05/25/116335.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/116335.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/116335.htmlA 綆鍗曠殑妯℃嫙 ,涓嶈繃鎴戝啓鐨勫緢楹葷儲

Problem

On Unix computers, data is stored in directories. There is one root directory, and this might have several directories contained inside of it, each with different names. These directories might have even more directories contained inside of them, and so on.

A directory is uniquely identified by its name and its parent directory (the directory it is directly contained in). This is usually encoded in a path, which consists of several parts each preceded by a forward slash ('/'). The final part is the name of the directory, and everything else gives the path of its parent directory. For example, consider the path:

/home/gcj/finals
This refers to the directory with name "finals" in the directory described by "/home/gcj", which in turn refers to the directory with name "gcj" in the directory described by the path "/home". In this path, there is only one part, which means it refers to the directory with the name "home" in the root directory.

To create a directory, you can use the mkdir command. You specify a path, and thenmkdir will create the directory described by that path, but only if the parent directory already exists. For example, if you wanted to create the "/home/gcj/finals" and "/home/gcj/quals" directories from scratch, you would need four commands:

mkdir /home
mkdir /home/gcj
mkdir /home/gcj/finals
mkdir /home/gcj/quals

Given the full set of directories already existing on your computer, and a set of new directories you want to create if they do not already exist, how many mkdir commands do you need to use?

Input

The first line of the input gives the number of test cases, T. T test cases follow. Each case begins with a line containing two integers N and M, separated by a space.

The next N lines each give the path of one directory that already exists on your computer. This list will include every directory already on your computer other than the root directory. (The root directory is on every computer, so there is no need to list it explicitly.)

The next M lines each give the path of one directory that you want to create.

Each of the paths in the input is formatted as in the problem statement above. Specifically, a path consists of one or more lower-case alpha-numeric strings (i.e., strings containing only the symbols 'a'-'z' and '0'-'9'), each preceded by a single forward slash. These alpha-numeric strings are never empty.

Output

For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is the number of mkdir you need.

Limits

1 鈮?T 鈮?100.
No path will have more than 100 characters in it.
No path will appear twice in the list of directories already on your computer, or in the list of directories you wish to create. A path may appear once in both lists however. (See example case #2 below).
If a directory is listed as being on your computer, then its parent directory will also be listed, unless the parent is the root directory.
The input file will be no longer than 100,000 bytes in total.

Small dataset

0 鈮?N 鈮?10.
1 鈮?M 鈮?10.

Large dataset

0 鈮?N 鈮?100.
1 鈮?M 鈮?100.

Sample

Input
Output

3
0 2
/home/gcj/finals
/home/gcj/quals
2 1
/chicken
/chicken/egg
/chicken
1 3
/a
/a/b
/a/c
/b/b

Gluk鐨勮В娉?

 set <string> S;
        REP (i, n)
        {
            string s;
            cin >> s;
            S.insert(s);//宸叉湁鐨勮礬寰勭敤set琛ㄧず
        }

        int res =0 ;

        REP (i, m)
        {
            string s;
            cin >> s;
            vector <string> ss;
            REP (j, s.size())
                if(s[j] == '/')
                    s[j] = ' ';//鐢ㄧ┖鏍兼浛鎹⑩?鈥欙紝鐒跺悗浣跨敤istringstream鍒嗛殧鍚勭駭鐩綍
            istringstream iss (s);
            while (iss >> s) {
                ss.pb (s);
            }

            s = "";
            REP (i, ss.size ())
            {
                s = s+"/"+ss[i];
                if (S.find(s) == S.end())//渚濇鍔犲叆鍚勭駭鐩綍錛?a  /a/b  /a/b/c 澧炲姞閫掑鐨勬墍鏈夌洰褰?
                {
                    res ++;
                    S.insert(s);
                }
            }
        }
棰樼洰涓殑榪欎竴鍙?/font>
If a directory is listed as being on your computer, then its parent directory will also be listed, unless the parent is the root directory.
鍛婅瘔鎴戜滑濡傛灉/a/b琚玪ist瀛樺湪錛岄偅涔?a涔熶竴瀹氳list鍑烘潵浜?錛屾墍浠ヤ笂闈唬鐮佸彲浠ヤ笉鍘誨垎闅斿鐞嗗凡緇忕粰鍑虹殑鐩綍
yuhch123鐨勮В娉?/font>
struct node {
   map <string, node *> sons;//姣忎釜鑺傜偣錛岀敤map瀹炵幇鍎垮瓙鑺傜偣
};
node *root;//涓涓牴鑺傜偣
int T;
int N, M;
char tmp[100005];
int ans = 0;
void insert(node *cnt, char *tmp) {//鍦ㄨ妭鐐筩nt澶勶紝鎻掑叆tmp瀛愭爲
   int i;
   if (tmp[0] == 0)//涓虹┖鍒欒繑鍥?
      return;
   assert(tmp[0] == '/');
   string str;
   for (i = 1; tmp[i] != '/' && tmp[i] != 0; i ++)//絎竴灞?
      str += tmp[i];
   if (cnt -> sons.find(str) == cnt -> sons.end()) {//濡傛灉娌℃湁榪欏瓙鏍戯紝鍒欏垱寤哄瓙鏍?
      ans ++;//闇瑕佷竴嬈kdir 
      struct node *tmp2 = new node();
      cnt -> sons[str] = tmp2;
   }
   insert(cnt -> sons[str], tmp + i);// 閫掑綊鍒涘緩瀛愭爲
}
int main() {
   int i;
   int Case = 1;
   scanf("%d", &T);
   while (T --) {
      scanf("%d%d", &N, &M);
      root = new node();
      for (i = 0; i < N; i ++) {
     scanf("%s", tmp);
     insert(root, tmp);
      }
      ans = 0;
      for (i = 0; i < M; i ++) {
     scanf("%s", tmp);
     insert(root, tmp);
      }
      printf("Case #%d: %d\n", Case ++, ans);
   }
   return 0;
}
neal.wu鐨勮В娉?/font>
vector <string> parse (string s)
{
    vector <string> v;
    string next = "";
    
    for (int i = 0; i < (int) s.length (); i++)
    {
        next += s [i];
        
        if (i + 1 == (int) s.length () || s [i + 1] == '/')
        {
            v.push_back (next);
            next = "";
        }
    }
    
    return v;
}

set <string> direc;

int insert (vector <string> v)
{
    int count = 0;
    string s = "";
    
    for (int i = 0; i < (int) v.size (); i++)
    {
        s += v [i];
        count += direc.insert (s).second ? 1 : 0; //set榪斿洖涓涓猵air<iterator,bool> bool鎸囩ず鎻掑叆鏄惁鎴愬姛   
 }
    
    return count;
}

int main ()
{
             freopen("d:\\input.txt","r",stdin);
  
    for (scanf ("%d", &T); TC <= T; TC++)
    {
        scanf ("%d %d", &N, &M);
        direc.clear ();
        int make = 0;
        char str [1000];
        
        for (int i = 0; i < N; i++)
        {
            do gets (str); while (strlen (str) == 0);//do gets 榪囨護鍥炶濺絀哄瓧絎︿覆
            insert (parse (str));
        }
        
        for (int i = 0; i < M; i++)
        {
            do gets (str); while (strlen (str) == 0);
            make += insert (parse (str));
        }
        
        printf ("Case #%d: %d\n", TC, make);
    }
    
    //system ("pause");
    return 0;
}
ploh鐨勮В娉?
int main(void)
{freopen("d:\\input.txt","r",stdin);
  int T; cin >> T;
  for (int t = 1; t <= T; t++) {
    int ans = 0;
    set <string> have, want;
    int N, M;
    cin >> N >> M;
    for (int i = 0; i < N; i++) {
      string path; cin >> path;
      have.insert(path);
    }
    for (int i = 0; i < M; i++) {//鐢ㄤ竴涓猻et淇濆瓨鎵鏈夐渶瑕佸姞鍏ョ殑
      string path; cin >> path;
      want.insert(path);
      for (int j = 1; j < path.length(); j++)
    if (path[j] == '/')
      want.insert(path.substr(0, j));
    }
    for (set <string>::iterator it = want.begin(); it != want.end(); it++)//閬嶅巻鎵鏈夐渶瑕佸姞鍏ョ殑錛岀劧鍚庣湅鏄惁瀛樺湪
      if (!have.count(*it))
    ans++;
    printf("Case #%d: %d\n", t, ans);
  }
}



rikisand 2010-05-25 23:29 鍙戣〃璇勮
]]>
浜斾竴鍓嶅皬緇撲笅http://m.shnenglu.com/zqsand/archive/2010/05/01/114120.htmlrikisandrikisandSat, 01 May 2010 06:31:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/05/01/114120.htmlhttp://m.shnenglu.com/zqsand/comments/114120.htmlhttp://m.shnenglu.com/zqsand/archive/2010/05/01/114120.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/114120.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/114120.html榪欏鏈熶篃寮濮嬩簡濂戒箙錛屾葷粨涓嬨?

欏圭洰涓婏細鍩烘湰寮勫畬浜嗙爜澶達紝綆楁槸緇撴潫浜嗗惂錛屽墿涓嬬殑宸ヤ綔鏄ソ濂芥葷粨涓嬪鍒扮殑涓滆タ錛屾妸鏋舵瀯錛岀敤鍒扮殑鎶鏈兘鐞嗛『浜嗭紝鏂逛究涔嬪悗闈㈣瘯鍥炵瓟銆?

鐢熸椿涓婏細榪欏崐涓湀gf鐢熺梾浜嗭紝鍢夊畾闂佃涓ゅご璺戞灉鐒跺緢绱紝涓嶈繃榪樺ソ涓鐩存娊絀虹湅涔︺傚仴搴峰緢閲嶈~~ 瑕佹姄绱ч敾鐐艱韓浣撲簡銆傛湰閽變竴瀹氳鎺屾彙濂姐?

鎵懼疄涔狅細鍏堝悗絎旇瘯浜嗘懇鏍筰t鍜屽井杞備笂鍛ㄦ懇鏍圭粰浜嗙數闈紝鍏ㄨ嫳鏂囩殑銆傚畬鍏ㄦ病鏈夋濇兂鍑嗗鐨勬垜姝e湪鍦ㄩ椀琛実f閭i噷鐓ч【濂癸紝鎵嬭竟浠涔堜功涔熸病鏈夛紝欏圭洰璧勬枡涔熸病鏈夛紝鎴戠殑澶勫コ闈㈠氨榪欐牱鈥滆8鐫鈥濆害榪囦簡錛屽埌鐜板湪榪樻病鏈夋秷鎭紝涔熶笉鐭ラ亾鏄笉鏄粯鍓т簡銆?寰蔣鏄笂鍛ㄥ叚絎旇瘯鐨勶紝涔熸病鏈夋秷鎭紝sigh~涓嶇煡閬撴槸娌℃敼瀹屽嵎瀛愯繕鏄澂鍏蜂簡~~

鍏充簬瀹炰範鐨勭瑪璇曞拰闈㈣瘯瑕佷笓闂ㄥ啓涓滆タ鎬葷粨涓涓嬶紝鏂逛究浠ュ悗鏌ラ槄銆?

1-4鍙鋒斁鍋囷紝搴旇涓嶄細鏈夋柊鐨勫畨鎺掕繘鏉ワ紙闈㈣瘯涔嬬被鐨勶級錛屽緱瀹夋帓涓嬩簨鎯?

涓婂懆鎶婂ぇ璇濊璁℃ā寮忕炕浜嗕竴閬嶏紝鍒╃敤榪欏嚑澶╄浠旂粏鐨勯噸鏂拌繃涓閬嶏紝姣忎竴涓ā寮忛兘鍐欎唬鐮佸疄璺典竴涓嬨?

鐒跺悗鎯崇湅鐪媍++鏍囧噯鏂囨。錛岃繖涓細寰堟參錛屽彲浠ラ夋嫨鎬х殑璺寵繃涓浜涗笢瑗匡紝鎬誨叡700澶氶〉錛岀湅鍓?00欏靛氨鍙互浜嗭紝鍚庨潰鏄粙緇嶅簱鐨勩備竴澶╃湅75欏碉紝鎭?路路路姣旇緝鍥伴毦路路 灝藉姏鍚?

鍏朵粬鐨勫氨涓嶅畨鎺掍簡錛屼篃鍋氫笉瀹岀殑銆?

鍙﹀錛屼箣鍚庡鐨勪笢瑗匡紝涓瀹氳鍙婃椂鐢ㄦ棩蹇楄涓嬫潵錛屽惁鍒欐椂闂撮暱浜嗚繕瑕佷粠澶村璧穈````

 

 

 

 

 

 



rikisand 2010-05-01 14:31 鍙戣〃璇勮
]]>
鍏充簬new鍜宒eletehttp://m.shnenglu.com/zqsand/archive/2010/04/07/111835.htmlrikisandrikisandWed, 07 Apr 2010 02:42:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/04/07/111835.htmlhttp://m.shnenglu.com/zqsand/comments/111835.htmlhttp://m.shnenglu.com/zqsand/archive/2010/04/07/111835.html#Feedback1http://m.shnenglu.com/zqsand/comments/commentRss/111835.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/111835.html鑹ソ鐨勭紪紼嬮鏍兼槸錛歯ew鍜宒elete 閰嶅浣跨敤錛屽嵆濡傛灉浣跨敤new [] 鍒欎嬌鐢╠elete []

浜嬪疄涓婏紝濡傛灉鎴戜滑浣跨敤鐨勬槸鑷畾涔夌被鍨媔nt char絳夛紝鎴栬呮垜浠嬌鐢ㄧ殑鏄病鏈夊唴瀛樼敵璇風殑綾伙紝鎴戜滑浣跨敤 delete A;騫朵笉浼氬彂鐢熶粈涔堜笉濂界殑浜嬫儏銆?/font>

榪欐槸鐢眃elete 鐨勮涔夊喅瀹氱殑銆傚綋鎴戜滑鏄敵璇蜂竴緇勫璞℃椂鍊欙紝緙栬瘧鍣ㄤ細鍔犲叆鍐呭瓨澶у皬淇℃伅鍜屾孌靛唴瀛樼浉鍏寵仈銆傚洜姝ゅ綋鎴戜滑delte A 鏃訛紝緙栬瘧鍣ㄤ細鎸夌収鍐呭瓨澶у皬鏀跺洖鍒嗙粰鎴戜滑鐨勫唴瀛樸傛樉鐒訛紝濡傛灉鏄熀鏈被鍨嬫垨鑰呮病鏈夌敵璇峰唴瀛樼殑鎯呭喌榪欐牱鐨勮涓烘槸鑹ソ鐨勩備絾鏄鏋滄垜浠湪鑷緩綾誨瀷涓敵璇蜂簡鍐呭瓨~瀵逛笉璧鳳紝緙栬瘧鍣ㄦ槸涓嶇煡閬撶殑錛岃繖浜涚敵璇風殑鍐呭瓨灝辨槸鍐呭瓨娉勯湶錛岄殢鐫紼嬪簭涓嶆柇榪涜錛屽爢涓嶆柇鍦拌渚佃殌路路路路路

榪欏氨鏄痙elete鐨勭浜屼釜浣滅敤錛屼粬浼氭柦鍔犳瀽鏋勫嚱鏁板湪鎴戜滑鐢寵鐨勫唴瀛樹笂錛屽鏋滄垜浠琩elete A錛屽彧浼氬湪絎竴涓笂鏂藉姞錛岃屽鏋渄elete [] A;浠栦細瀵規暟緇勪腑姣忎竴涓厓绱犺繘琛屾瀽鏋剘~

so路路路路

璇曢獙寰堝鏄撳仛錛屽啓涓や釜綾伙紝涓涓敵璇峰唴瀛橈紝涓涓櫘閫氱殑綾伙紝鐒跺悗寰幆鐢寵澶ч噺鏁扮粍錛屼絾鏄敤 delete A 褰㈠紡錛岀劧鍚庣湅鐪嬪唴瀛樺崰鐢ㄥ氨琛屼簡



rikisand 2010-04-07 10:42 鍙戣〃璇勮
]]>
鍏充簬瀵歸綈http://m.shnenglu.com/zqsand/archive/2010/04/04/111589.htmlrikisandrikisandSun, 04 Apr 2010 08:00:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/04/04/111589.htmlhttp://m.shnenglu.com/zqsand/comments/111589.htmlhttp://m.shnenglu.com/zqsand/archive/2010/04/04/111589.html#Feedback3http://m.shnenglu.com/zqsand/comments/commentRss/111589.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/111589.html

鏁版嵁瀵歸綈錛氭槸鎸囨暟鎹墍鍦ㄧ殑鍐呭瓨鍦板潃蹇呴』鏄鏁版嵁闀垮害鐨勬暣鏁板嶃傚鐞嗗櫒鍙互鐩存帴璁塊棶瀵歸綈鐨勬暟鎹紝鑰岃闂湭瀵歸綈鐨勬暟鎹細鍦ㄥ唴閮ㄨ繘琛屼竴緋誨垪鐨勮皟鏁達紝铏界劧鍙互姝e父澶勭悊錛屼絾鏄細闄嶄綆榪愯閫熷害銆備緥濡備竴涓鐞嗗櫒鎬葷嚎瀹藉害涓?4浣嶏紝閭d箞鍦板潃蹇呴』涓?鐨勫嶆暟錛屼篃灝辨槸涓嬈″彇鍑?涓瓧鑺傘傚鏋滄垜浠彲浠ヤ繚璇佹墍鏈塪ouble鍦板潃閮戒負8鐨勫嶆暟錛岄偅涔堝彲浠ョ敤涓涓瓨鍌ㄥ櫒鎿嶄綔鏉ヨ鎴栬呭啓double浜嗭紝鍚﹀垯鎴戜滑鍙兘闇瑕佹墽琛屼袱嬈″瓨鍌ㄥ櫒璁塊棶錛屽洜涓哄璞″彲鑳戒綅浜庝袱涓?瀛楄妭瀛樺偍鍣ㄥ潡涓?/font>

瀵逛簬緇撴瀯浣撲篃鏄竴鏍風殑渚嬪 struct s2{int i;int j;char c;}; 濡傛灉鎴戜滑鎶婅繖涓粨鏋勬墦鍖呮垚9涓瓧鑺傦紝鍙淇濊瘉璧峰鍦板潃婊¤凍4鐨勫榻愯姹傛垜浠氨鍙互淇濊瘉i j鐨勫榻愶紝涓嶈繃濡傛灉鎴戜滑澹版槑浜嗕竴涓暟緇勶紝閭d箞鍏冪礌鍦板潃鎴愪負 xd,xd+9,xd+18,xd+27 涓嶆弧瓚沖榻愪簡銆傚洜姝ゆ垜浠憿瑕佸垎閰?2涓瓧鑺傜粰榪欎釜緇撴瀯浣?/font>

鏇磋繘涓姝?錛?/font>

鏈榻愮殑鏁版嵁浼氫互涓嶅悓鏂瑰紡緇檆pu甯︽潵楹葷儲~

1.濡傛灉涓涓彉閲忚鍒掑垎鍒頒袱涓紦瀛樿錛岄偅涔堟垜浠渶瑕佽闂袱涓紦瀛樿鎵嶅彲浠ャ?/font>

2.涓浜泂imd鎸囦護鎬繪槸瑕佹眰瀵歸綈鐨勬寚浠わ紝瀵逛簬鏈榻愮殑鎸囦護錛屾暟鎹榻愪篃浼氬獎鍝嶈繖浜涙寚浠ょ殑浣跨敤銆?/font>



rikisand 2010-04-04 16:00 鍙戣〃璇勮
]]>
USACO 4.2.2 絎竴閬撶綉緇滄祦&middot;&middot;&middot;&middot;http://m.shnenglu.com/zqsand/archive/2010/03/26/110584.htmlrikisandrikisandFri, 26 Mar 2010 05:04:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/03/26/110584.htmlhttp://m.shnenglu.com/zqsand/comments/110584.htmlhttp://m.shnenglu.com/zqsand/archive/2010/03/26/110584.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/110584.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/110584.htmlDrainage Ditches
Hal Burch

Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.

Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network. Note however, that there can be more than one ditch between two intersections.

Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.

PROGRAM NAME: ditch
INPUT FORMAT

Line 1:
Two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream.

Line 2..N+1:
Each of N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.

SAMPLE INPUT (file ditch.in)
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
OUTPUT FORMAT

One line with a single integer, the maximum rate at which water may emptied from the pond.

SAMPLE OUTPUT (file ditch.out)
50
鏈鍩烘湰鐨勭綉緇滄祦
   1:  #include<iostream>
   2:  #include<fstream>
   3:  #include<string>
   4:  #include<vector>
   5:  #include<map>
   6:  #include<algorithm>
   7:  #include<sstream>
   8:  #include <cstring>
   9:  #include <queue>
  10:  using namespace std;
  11:  const int MAXN = 220;
  12:  const int infi = 0x7FFFFFFF;
  13:   int capacity[MAXN][MAXN], prenode[MAXN], flow[MAXN];
  14:   queue<int> mq; 
  15:   
  16:  int start, end, N;
  17:  void init(){
  18:      freopen("ditch.in","r",stdin);
  19:      //freopen("e:\\usaco\\ditch.in","r",stdin);
  20:      start = 1;  
  21:      scanf("%d %d",&N,&end); int c, s, t;
  22:      memset(capacity,0,sizeof(capacity));
  23:      for(int i=0;i<N;i++)
  24:      {
  25:          scanf("%d %d %d",&c,&s,&t);
  26:          capacity[c][s] += t; //涓や釜鑺傜偣闂翠笉鍙湁涓鏉¤礬
  27:      } 
  28:  }
  29:  int bfs(){//瀵繪壘澧炲箍璺緞
  30:      while(!mq.empty()) mq.pop(); 
  31:      mq.push(start);  //婧愯妭鐐瑰叆闃?/span>
  32:      //memset(flow,0,sizeof(flow));
  33:      memset(prenode,-1,sizeof(prenode)); //閲嶇疆鍓嶅悜鑺傜偣
  34:      prenode[start] = 0; flow[start]=infi; //婧愯妭鐐規祦閲忔棤闄愬ぇ
  35:      while(!mq.empty()){
  36:          int cur = mq.front(); 
  37:          mq.pop();
  38:          if(cur == end) break; //鍒拌揪姹囩偣緇撴潫璺緞 
  39:          for(int i=1;i<=end;i++){ 
  40:              if(prenode[i]==-1 && capacity[cur][i]) //璁塊棶褰撳墠鑺傜偣鎵鏈夋湭璁塊棶鐨勭浉閭昏妭鐐癸紝鏇存柊flow
  41:              {
  42:                  prenode[i] = cur;
  43:                  flow[i] = (flow[cur]<capacity[cur][i]?flow[cur]:capacity[cur][i]);
  44:                  mq.push(i);
  45:              }
  46:          }
  47:      }
  48:      if(prenode[end]==-1)  //濡傛灉鏈壘鍒板騫胯礬寰勮繑鍥?1
  49:          return -1;
  50:      return flow[end];
  51:  }
  52:  int Edmonds_Karp(){
  53:      int total = 0, pathcapacity;//pathcapacity 璺緞澧炲姞閲?/span>
  54:      while((pathcapacity = bfs()) != -1){//鍙互鎵懼埌澧炲箍璺緞鏃跺欒繘琛屽驚鐜?/span>
  55:          int cur = end;    //浠庢眹鐐瑰紑濮嬪鍔犻嗗悜鑺傜偣
  56:          while( cur != start ){
  57:              int t = prenode[cur] ;
  58:              capacity[t][cur] -= pathcapacity;
  59:              capacity[cur][t] += pathcapacity;
  60:              cur = t;
  61:          }
  62:          total += pathcapacity;//max_flow
  63:      }
  64:      return total;
  65:  }
  66:  void output(){
  67:      freopen("ditch.out","w",stdout);
  68:      //freopen("c:\\usaco\\ditch.out","w",stdout);
  69:      cout<<Edmonds_Karp()<<endl;
  70:  } 
  71:     int main()
  72:  {
  73:      init();  
  74:      output();
  75:      return 0;
  76:  }

鏍囩▼錛氫嬌鐢ㄨ椽蹇冩硶錛屽鎵句竴鏉″騫胯礬寰勭殑鏃跺欎笉鏂鎵綾ap鏈澶х殑錛屾湭琚闂殑鑺傜偣mloc錛涚劧鍚庢洿鏂拌窡mloc鐩擱偦鐨勮妭鐐筬low浠?/font>

鍙妏renode淇℃伅.鏈鍚庡綋榪愯鍒癳nd鏃跺欙紝鏇存柊璺緞鑺傜偣capacity錛屽悓鏃跺鍔爉ax_flow.閲嶅涓婅堪榪囩▼鐩村埌鎵句笉鍒板騫胯礬寰?/font>

   1:  #include <stdio.h>
   2:  #include <string.h>
   3:   
   4:  #define MAXI 200
   5:   
   6:  /* total drain amount between intersection points */
   7:  int drain[MAXI][MAXI];
   8:  int nint; /* number of intersection points */
   9:   
  10:  int cap[MAXI]; /* amount of flow that can get to each node */
  11:  int vis[MAXI]; /* has this node been visited by Dijkstra's yet? */
  12:  int src[MAXI]; /* the previous node on the path from the source to here */
  13:   
  14:  int augment(void)
  15:   { /* run a Dijkstra's varient to find maximum augmenting path */
  16:    int lv;
  17:    int mloc, max;
  18:    int t;
  19:   
  20:    memset(cap, 0, sizeof(cap));
  21:    memset(vis, 0, sizeof(vis));
  22:   
  23:    cap[0] = 2000000000;
  24:    while (1)
  25:     {
  26:      /* find maximum unvisited node */
  27:      max = 0;
  28:      mloc = -1;
  29:      for (lv = 0; lv < nint; lv++)
  30:        if (!vis[lv] && cap[lv] > max)
  31:         {
  32:          max = cap[lv];
  33:      mloc = lv;
  34:         }
  35:      if (mloc == -1) return 0;
  36:      if (mloc == nint-1) break; /* max is the goal, we're done */
  37:   
  38:      vis[mloc] = -1; /* mark as visited */
  39:   
  40:      /* update neighbors, if going through this node improves the
  41:         capacity */
  42:      for (lv = 0; lv < nint; lv++)
  43:        if (drain[mloc][lv] > cap[lv] && max > cap[lv])
  44:         {
  45:          cap[lv] = drain[mloc][lv];
  46:      if (cap[lv] > max) cap[lv] = max;
  47:      src[lv] = mloc;
  48:         }
  49:     }
  50:    max = cap[nint-1];
  51:   
  52:    /* augment path, starting at end */
  53:    for (lv = nint-1; lv > 0; lv = src[lv])
  54:     {
  55:      t = src[lv];
  56:      drain[t][lv] -= max;
  57:      drain[lv][t] += max;
  58:     }
  59:    return max;
  60:   }
  61:   
  62:  int main(int argc, char **argv)
  63:   {
  64:    FILE *fout, *fin;
  65:    int lv;
  66:    int num;
  67:    int p1, p2, c;
  68:   
  69:    if ((fin = fopen("ditch.in", "r")) == NULL)
  70:     {
  71:      perror ("fopen fin");
  72:      exit(1);
  73:     }
  74:    if ((fout = fopen("ditch.out", "w")) == NULL)
  75:     {
  76:      perror ("fopen fout");
  77:      exit(1);
  78:     }
  79:   
  80:    fscanf (fin, "%d %d", &num, &nint);
  81:    while (num--)
  82:     {
  83:      fscanf (fin, "%d %d %d", &p1, &p2, &c);
  84:      p1--;
  85:      p2--;
  86:      drain[p1][p2] += c; /* note += handles two ditches between same points */
  87:     }
  88:   
  89:    /* max flow algorithm: augment while you can */
  90:    c = 0;
  91:    while ((p1 = augment()))
  92:      c += p1;
  93:    fprintf (fout, "%d\n", c);
  94:    return 0;
  95:   }

 

 

 

 

 

 

 

 



rikisand 2010-03-26 13:04 鍙戣〃璇勮
]]>
娣卞叆鎺㈢儲C++瀵硅薄妯″瀷璇諱功絎旇 (涓?http://m.shnenglu.com/zqsand/archive/2010/03/25/110552.htmlrikisandrikisandThu, 25 Mar 2010 13:09:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/03/25/110552.htmlhttp://m.shnenglu.com/zqsand/comments/110552.htmlhttp://m.shnenglu.com/zqsand/archive/2010/03/25/110552.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/110552.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/110552.html鏈鍚庝竴绔爚~鎷栦簡鍑犲ぉ錛屽緱璧剁揣璁頒笅浜唦~

鍚嶅瓧錛?On the cusp of the object model

7.1 Template

Template鐢ㄧ殑寰堝皯錛岃繖鑺備腑鐨勬湁浜涗笢瑗挎瘮杈冩櫐娑╋紝鎸戜竴浜涜兘鐞嗚В鐨勮涓嬪惂銆傚墿涓嬬殑絳夌敤鐨勫浜嗗啀鍥炲ご鏉ョ湅銆?/font>

Template鐨勫叿鐜拌涓?template instantiation

Template <calss T>class Point{

  public: enum Status{unallocated,normalized};Point(T x=0.0,T y=0.0);

~Point() ; void * operator new(size_t);private:static Point<T> *freelist

static int chunksize; T _x,_y;

};

緙栬瘧鍣ㄧ湅鍒拌繖鏍風殑澹版槑錛屼細鏈変粈涔堝姩浣滐紵錛?/font>

娌℃湁銆俿tatic data 涓嶅彲鐢?enum 涓嶅彲鐢?錛宔num铏界劧綾誨瀷鍥哄畾錛屼絾浠栧彧鑳藉拰template point class 鐨勬煇涓疄浣撴潵瀛樺彇鎴栨搷浣溿傛垜浠彲浠?point<float>::Status s;

浣嗘槸涓嶈兘 point::status s; 鍥犳鎴戜滑鍙兘鎯蟲妸enum鎶界鍒頒竴涓潪妯℃澘綾諱互閬垮厤澶氶噸鎷瘋礉銆傚悓鏍烽亾鐞嗭紝freelist 鍜宑hunksize瀵逛簬紼嬪簭鑰岃█涔熶笉鍙敤銆傚繀欏繪槑紜寚瀹歱oint<float>::freelist.涔熷氨鏄闈欐佹暟鎹垚鍛樻槸鍜岀壒瀹氱被鍨嬬殑綾葷粦瀹氱殑鑰屼笉鏄硾鍨嬬殑妯℃澘綾匯備絾鏄鏋滃畾涔変竴涓寚閽堜笉涓瀹氫細鍏風幇鍑虹浉搴旂殑綾伙紝鍥犱負涓涓寚閽堬紝騫朵笉涓瀹氭寚鍚戜竴涓猚lass object銆傜紪璇戝櫒涓嶉渶瑕佺煡閬撹class 鐩稿簲鐨勪換浣昺ember 鎴栬呮暟鎹垨鑰?/font>

鍐呭瓨甯冨眬錛屾墍浠ユ病鏈夊繀瑕佸叿鐜般備絾鏄鏋滄槸瀹氫箟騫跺垵濮嬪寲涓涓紩鐢ㄥ氨鐪熺殑浼氬叿鐜板嚭涓涓疄浣擄紝鍥犱負涓嶅瓨鍦ㄧ┖寮曠敤銆?/font>

鎴愬憳鍑芥暟騫朵笉搴旇琚疄浣撳寲錛屽彧鏈夊綋浠栬璋冪敤鐨勬椂鍊欐墠闇瑕佽鍏風幇鍑烘潵銆?/font>

template<class T>

class mumble{

public: Muble(T t=1024):tt(t){ if(tt!=t)throw ex; }

private: T tt;

};

涓婇潰鐨勬ā鏉夸腑鍑虹幇閿欒鏈夛紝t=1024 涓嶄竴瀹氭垚鍔燂紝!= 涓嶄竴瀹氬畾涔?/font>

榪欎袱涓敊璇彧鏈夊埌鍏風幇鎿嶄綔緇撳悎鍏蜂綋綾誨瀷鎵嶈兘紜畾鍑烘潵

緙栬瘧鍣ㄩ潰瀵逛竴涓猼emplate澹版槑錛屽湪浠栬涓緇勫疄闄呭弬鏁板叿鐜頒箣鍓嶏紝鍙兘瀹炶浠ユ湁闄愬湴閿欒媯鏌ワ紝鍙湁鐗瑰畾瀹炰綋瀹氫箟涔嬪悗錛屾墠浼氬彂鐜頒竴浜涗笌璇硶鏃犲叧鐨勪絾鏄崄鍒嗘槑鏄劇殑閿欒錛岃繖鏄妧鏈笂鐨勪竴澶ч棶棰樸?/font>

Template 鐨勫悕縐板喅璁柟寮?/font>

.h鏂囦歡瀹氫箟

void out(int x){
    cout<<"out_by_class_define_scrope"<<endl;
}
template <class type>
class A{
public:
    void test1(){
        out(m1);
    }
    void test2(){
        out(m2);
    }
private:
    int m1;
    type m2;
};

.cpp鏂囦歡瀹氫箟

void out(double x){
    cout<<"out_by_class_instantiation_scrope"<<endl;
}

int main(錛?br>{    
    A<double> a;
    a.test1();
    a.test2();

}

鎸夌収涔︿腑鐨勮娉曪紝濡傛灉涓涓嚱鏁幫紝鍙傛暟綾誨瀷鍜宼ype鏃犲叧鐨勮瘽錛屽簲璇ュ彇浠栫殑scope of template declaration涓畾涔夌殑鍑芥暟錛岃屽弽涔嬪彇鍦ㄤ粬鐨刬nstantiation涓殑閭d釜銆備簨瀹炰笂鍦ㄦ祴璇曚腑鍙戠幇

MSVC 涓?錛屽嚱鏁板畾涔夌殑鍐寵鏄緷鐓х被鍨嬬殑錛屽鏋滄湁鍚堥傜殑鍑芥暟姣斿type鏄痙ouble錛屾鏃跺鏋滃畾涔夊鎴栬呭叿鐜板鏈塪ouble鍨嬬殑鍑芥暟瀹氫箟錛岄偅涔堝嚱鏁板氨浼氬喅璁負閭d竴涓畾涔夌殑~~~

MEMber function鐨勫叿鐜拌涓猴細

緙栬瘧鍣ㄥ浣曠‘淇濆彧鏈変竴涓獀table浜х敓錛?涓縐嶆柟娉曟槸 姣忎竴涓獀irtual func鍦板潃閮芥斁鍦╲table涓紝濡傛灉鍙栧緱鍑芥暟鍦板潃錛屽垯琛ㄧずvirtual func 鐨勫畾涔夊繀鐒跺嚭鐜板湪紼嬪簭鐨勬煇涓湴鐐癸紝鍚﹀垯紼嬪簭鏃犳硶榪炴帴鎴愬姛銆傛澶栬鍑芥暟鍙兘鏈変竴涓疄浣擄紝鍚﹀垯涔熸槸榪炴帴涓嶆垚鍔熴傞偅涔堬紝灝辨妸vtable鏀懼湪瀹氫箟浜嗚class鐨勭涓涓猲on-inline錛宯onpure virtual function鐨勬枃浠朵腑鍚с傘傦紙not so clear錛?/font>

鍦ㄥ疄鐜板眰闈笂錛宼emplate 浼間箮鎷掔粷鍏ㄩ潰鑷姩鍖栵紝浠ユ墜鍔ㄦ柟寮忓湪涓埆鐨刼bject module涓畬鎴愰鍏堢殑鍏風幇宸ヤ綔鏄竴縐嶆湁鏁堢巼鐨勬柟娉曘?/font>

7.2寮傚父澶勭悊

涓轟簡緇存寔鎵ц閫熷害錛岀紪璇戝櫒鍙互鍦ㄧ紪璇戞椂鏈熷緩绔嬭搗鐢ㄤ簬鏀寔鐨勬暟鎹粨鏋?/font>

涓轟簡緇存寔紼嬪簭澶у皬錛岀紪璇戝櫒鍙互鍦ㄦ墽琛屾湡寤虹珛鏁版嵁緇撴瀯

c++ eH 涓昏鐢變笁涓儴鍒嗘瀯鎴愶細

throw璇彞

catch璇彞

try璇彞錛岃繖浜涜鍙ュ彲鑳借Е鍙慶atch瀛愬彞璧蜂綔鐢?/font>

涓涓猠xception 琚姏鍑烘椂鍊欙紝鎺у埗鏉冧細浠庡嚱鏁拌皟鐢ㄩ噴鏀懼嚭鏉ワ紝騫跺鎵句竴涓惢鍚堢殑catch錛屽鏋滄病鏈夐偅涔堥粯璁ょ殑澶勭悊渚嬬▼terminate()浼氳璋冪敤錛屾帶鍒舵潈鏀懼純鍚庯紝鍫嗘爤涓殑姣忎竴涓嚱鏁拌皟鐢ㄤ篃琚帹紱匯傛瘡涓涓嚱鏁拌鎺ㄧ鍫嗘爤鐨勬椂鍊欙紝鍑芥暟鐨刲ocal class object 鐨刣tor涔熶細琚皟鐢ㄣ?/font>

鍦ㄧ▼搴忎笉鍚屾閲岋紝鐢變簬澹版槑涓嶅悓鐨勫彉閲忥紝涓涓尯鍩熷彲鑳藉洜涓哄湪鍖哄煙鍐呭彂鐢焑xception鐨勫鐞嗘柟寮忎笉鍚屽垎鎴愬涓尯孌點?/font>

鍦ㄧ▼搴忓憳灞傞潰錛宔h涔熸敼鍙樹簡鍑芥暟鍦ㄨ祫婧愪笂鐨勭鐞嗐備緥濡備笅闈㈠嚱鏁頒腑鏇村惈鏈夊涓鍧楀叡浜唴瀛樼殑locking鍜寀nlocking鎿嶄綔 錛?/font>

void mumble(void * arena){

Point *p= new point ;

smlock(arena) ;

//鈥?.濡傛灉姝ゆ椂涓涓猠xception鍙戠敓錛岄棶棰樺氨浜х敓浜?/font>

sumunlock(arena);

delete p;

}

浠庤涔変笂璁詫紝鎴戜滑鍦ㄥ嚱鏁伴鍑哄爢鏍堜箣鍓嶏紝闇瑕乽nlock鍏變韓鍐呭瓨騫禿elete p錛屾垜浠渶瑕佽繖鏍峰仛錛?/font>

try{smlock(arena)} catch(鈥?{

    smunlock(arena); delete p; throw;

}

new涓嶉渶瑕佹斁鍦╰ry孌甸噷錛屽洜涓猴紝濡傛灉new鍙戠敓浜唀xception錛宧eap涓殑鍐呭瓨騫舵病鏈夊垎閰嶏紝point鐨刢tor娌℃湁璋冪敤錛屽鏋滃湪ctor涓璭xception錛岄偅涔坧iont鐨勪換浣曟瀯閫犲ソ鐨勫悎鎴愮墿涔熶細鑷姩瑙f瀯鎺夛紝heap涔熶細鑷姩閲婃斁鎺夈?/font>

澶勭悊榪欑璧勬簮綆$悊闂錛屽緩璁細 鎶婅祫婧愰渶姹傚皝瑁呭湪涓涓猚lass object 浣撳唴錛屽茍鐢眃tor閲婃斁璧勬簮.

auto_ptr<point> ph (new point); smlock sm(arena);//濡傛灉姝ゆ椂exception 娌℃湁闂

// 涓嶉渶瑕佹槑紜殑unlock 鍜宒elete

// local dtor 浼氬湪榪欓噷琚皟鐢?sm.SMlock::~smlock(); ph.auto_ptr<point>::~auto_ptr<point>

Exception handling 鐨勬敮鎸侊細

1.媯楠屽彂鐢焧hrow鎿嶄綔鐨勫嚱鏁?/font>

2.鍐沖畾throw鏄惁鍙戠敓鍦╰ry鍖烘閲?/font>

3.濡傛灉鏄紪璇戝櫒蹇呴』鎶奺xception type 鎷挎潵鍜宑atch姣旇緝

4.鍚誨悎鐨勮瘽鎺у埗鏉冧氦緇檆atch

5.濡傛灉throw涓嶅彂鐢熷湪try孌墊垨鑰呮病鏈夊惢鍚堢殑錛岀郴緇熶細鎽ф瘉鎵鏈塧ctive local object b浠庡爢鏍堟妸褰撳墠鍑芥暟unwind鎺?錛岃煩鍑哄埌紼嬪簭鍫嗘爤鐨勪笅涓涓嚱鏁板幓錛岀劧鍚庨噸澶嶄笂榪版楠?/font>

褰撲竴涓疄闄呭璞″湪紼嬪簭鎵ц鏃惰鎶涘嚭錛宔xception object浼氳浜х敓鍑烘潵騫墮氬父鏀懼湪鐩稿悓褰㈠紡鐨別xception 鏁版嵁鍫嗘爤涓?/font>

catch(expoint p){

   //do sth

   throw;

}

浠ュ強涓涓猠xception object 綾誨瀷涓?exVertex 媧劇敓鑷?expoint 錛岃繖涓ょ綾誨瀷閮藉惢鍚堬紝catch浼氭庝箞鍋?/font>

浠xception object浣滀負鍒濆鹼紝鍍忓嚱鏁板弬鏁頒竴鏍蜂細鏈変竴涓猯ocal copy錛屽鏋減鏄竴涓猳bject鑰屼笉鏄竴涓猺eference 錛屽唴瀹硅鎷瘋礉鐨勬椂鍊欙紝榪欎釜object鐨勯潪expoint閮ㄥ垎浼氳鍒囨帀錛屽鏋滄湁vptr 浼氳璁懼畾涓篹xpoint鐨剉ptr錛屽鏋滆鍐嶆涓㈠嚭鍛紵涓㈠嚭p闇瑕佸啀浜х敓鍙﹀涓涓猠xception 涓存椂瀵硅薄錛屼涪鍑哄師鏉ョ殑寮傚父 錛屼箣鍓嶇殑淇敼緇熺粺浣滃簾銆備絾鏄鏋?catch(expoint& p);鎬庝箞鏍峰憿銆?浠諱綍瀵硅繖涓猳bject鐨勬敼鍙橀兘浼氱箒孌栧埌涔嬪悗鐨刢atch璇彞鎬匯?/font>

c++ 緙栬瘧鍣ㄤ負浜嗘敮鎸丒H浠樺嚭鐨勪唬浠鋒渶澶э紝鏌愮紼嬪害鏄洜涓烘墽琛屾湡鐨勫ぉ鎬т互鍙婂搴曞眰紜歡鐨勪緷璧栥?/font>

7.3 RTTI

RTTI鏄疎xcept handling鐨勪竴涓檮灞炰駭鍝侊紝鍥犱負鎴戜滑闇瑕佹彁渚涙煇縐嶆煡璇xception objects鐨勬柟娉曪紝鐢ㄦ潵寰楀埌exception鐨勫疄闄呯被鍨嬨?/font>

鍦ㄥ悜涓嬭漿鍨嬮棶棰樹笂錛屽鏋滆淇濊瘉鍏跺畨鍏ㄦэ紝閭d箞蹇呴』鍦ㄦ墽琛屾湡瀵規寚閽堟湁鎵鏌ヨ錛岀湅鐪嬪畠鍒板簳鎸囧悜浠涔堢被鍨嬬殑瀵硅薄銆傞偅涔堟垜浠渶瑕侀澶栫殑絀洪棿瀛樺偍綾誨瀷淇℃伅錛岄氬父鏄竴涓寚閽堬紝鎸囨煇涓被鍨嬩俊鎭妭鐐廣?/font>

闇瑕侀澶栫殑鏃墮棿浠ュ喅瀹氭墽琛屾湡鐨勭被鍨嬨?/font>

鍐茬獊鍙戠敓鍦細

1.紼嬪簭鍛樺ぇ閲忕殑浣跨敤浜嗗鍙幫紝騫墮渶瑕佸ぇ閲忕殑downcast鎿嶄綔

2.紼嬪簭鍛樹嬌鐢ㄥ唴寤虹殑鏁版嵁綾誨瀷鍜岄潪澶氭侊紝浠栦笉闇瑕侀澶栬礋鎷呭甫鏉ョ殑渚垮埄

閭d箞濡備綍浜嗚В紼嬪簭鍛樼殑闇瑕佸憿錛燂紵 絳栫暐鏄竴涓叿鏈夊鎬佹фц川鐨刢lass錛屼篃灝辨槸鍏鋒湁鍐呮兜緇ф壙鎴栬呭0鏄?virtual func鐨勭被闇瑕乺tti鏀寔銆?/font>

榪欐牱鎵鏈夊鎬佺被緇存姢涓涓獀ptr銆傞澶栬礋鎷呴檷浣庡埌錛氭瘡涓涓猚lass object澶氳姳璐逛竴涓寚閽堬紝鎸囬拡鍙璁懼畾涓嬈★紝鑰屼笖鏄紪璇戝櫒闈欐佽瀹氥?/font>

down_cast

if(pfct pf = dynamic_cast< pfct >(pt))鈥?

((type_info*)(pt->vptr[0]))->type_descripter;

Reference --------Pointer

dynamic_cast鎵ц鍦╬tr涓?澶辮觸榪斿洖0錛屽鏋滃疄琛屽湪ref涓娿傜敱浜巖ef涓嶈兘琚祴浜坣ull錛屼篃灝辨槸娌℃湁絀哄紩鐢ㄣ傚鏋滄垜浠妸涓涓猺ef璁句負0浼氬紩鍙戜復鏃跺璞′駭鐢燂紝鐒跺悗鐢?鍒濆鍖栧畠錛屼嬌ref鎴愪負榪欎釜涓存椂瀵硅薄鐨勫埆鍚嶃傚洜姝ゆ鏃跺け璐ヤ簡浼氫駭鐢熶竴涓猙ad_cast exception銆?/font>

typeid鐨勫弬鏁板彲浠ヤ嬌寮曠敤錛屽璞℃垨鑰呮槸綾誨瀷

浜嬪疄涓婏紝type_info 涔熼傜敤鍐呭緩綾誨瀷錛岃繖瀵逛簬eh鏈哄埗鏈夊繀瑕?/font>

渚嬪 int ex_errno; throw ex_errno;

鍏朵腑int綾誨瀷 int *ptr; if(typeid(ptr) == typeid(int*));

----------------------鍏ㄤ功絎旇鍒版緇撴潫 --------------------------------s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



rikisand 2010-03-25 21:09 鍙戣〃璇勮
]]>
寰蔣緇忓吀闈㈣瘯嫻嬭瘯棰樺拰鍙傝冪瓟妗堬紙鍙樻侊級 - TOMB RAIDER - CSDNBlog錛堣漿杞斤級http://m.shnenglu.com/zqsand/archive/2010/03/22/110324.htmlrikisandrikisandMon, 22 Mar 2010 15:21:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/03/22/110324.htmlhttp://m.shnenglu.com/zqsand/comments/110324.htmlhttp://m.shnenglu.com/zqsand/archive/2010/03/22/110324.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/110324.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/110324.html 

絎竴緇?

1.鐑т竴鏍逛笉鍧囧寑鐨勭懷錛屼粠澶寸儳鍒板熬鎬誨叡闇瑕?涓皬鏃躲傜幇鍦ㄦ湁鑻ュ共鏉℃潗璐ㄧ浉鍚岀殑緇沖瓙錛岄棶濡備綍鐢ㄧ儳緇崇殑鏂規硶鏉ヨ鏃朵竴涓皬鏃跺崄浜斿垎閽熷憿錛?br>2.浣犳湁涓妗舵灉鍐伙紝鍏朵腑鏈夐粍鑹層佺豢鑹層佺孩鑹蹭笁縐嶏紝闂笂鐪肩潧鎶撳彇鍚岀棰滆壊鐨勪袱涓傛姄鍙栧灝戜釜灝卞彲浠ョ‘瀹氫綘鑲畾鏈変袱涓悓涓棰滆壊鐨勬灉鍐伙紵
3.濡傛灉浣犳湁鏃犵┓澶氱殑姘達紝涓涓?鍏崌鐨勬彁鎹咃紝涓涓?鍏崌鐨勬彁鎹咃紝涓ゅ彧鎻愭崊褰㈢姸涓婁笅閮戒笉鍧囧寑錛岄棶浣犲浣曟墠鑳藉噯紜О鍑?鍏崌鐨勬按錛?br>4.涓涓矓璺彛鍒嗗埆閫氬悜璇氬疄鍥藉拰璇磋皫鍥姐傛潵浜嗕袱涓漢錛屽凡鐭ヤ竴涓槸璇氬疄鍥界殑錛屽彟涓涓槸璇磋皫鍥界殑銆傝瘹瀹炲浗姘歌繙璇村疄璇濓紝璇磋皫鍥芥案榪滆璋庤瘽銆傜幇鍦ㄤ綘瑕佸幓璇磋皫鍥斤紝浣嗕笉鐭ラ亾搴旇璧板摢鏉¤礬錛岄渶瑕侀棶榪欎袱涓漢銆傝闂簲璇ユ庝箞闂紵
5.12涓悆涓涓ぉ騫籌紝鐜扮煡閬撳彧鏈変竴涓拰鍏跺畠鐨勯噸閲忎笉鍚岋紝闂庢牱縐版墠鑳界敤涓夋灝辨壘鍒伴偅涓悆銆?3涓憿錛燂紙娉ㄦ剰姝ら騫舵湭璇存槑閭d釜鐞冪殑閲嶉噺鏄交鏄噸錛屾墍浠ラ渶瑕佷粩緇嗚冭檻錛?br>6.鍦?涓偣涓婄敾10鏉$洿綰匡紝瑕佹眰姣忔潯鐩寸嚎涓婅嚦灝戞湁涓変釜鐐癸紵
7.鍦ㄤ竴澶╃殑24灝忔椂涔嬩腑錛屾椂閽熺殑鏃墮拡銆佸垎閽堝拰縐掗拡瀹屽叏閲嶅悎鍦ㄤ竴璧風殑鏃跺欐湁鍑犳錛熼兘鍒嗗埆鏄粈涔堟椂闂達紵浣犳庢牱綆楀嚭鏉ョ殑錛?br>8.鎬庝箞鏍風妞?媯墊爲鏈紝浣垮叾涓換鎰忎袱媯墊爲鐨勮窛紱葷浉絳夛紵

絎簩緇?

1.涓轟粈涔堜笅姘撮亾鐨勭洊瀛愭槸鍦嗙殑錛?br>2.涓浗鏈夊灝戣締姹借濺錛?br>3.灝嗘苯杞﹂挜鍖欐彃鍏ヨ濺闂紝鍚戝摢涓柟鍚戞棆杞氨鍙互鎵撳紑杞﹂攣錛?br>4.濡傛灉浣犺鍘繪帀涓浗鐨?4涓渷錛堝惈鑷不鍖恒佺洿杈栧競鍜屾腐婢崇壒鍖哄強鍙版咕鐪侊級涓殑浠諱綍涓涓紝浣犱細鍘繪帀鍝竴涓紝涓轟粈涔堬紵
5.澶氬皯涓姞娌圭珯鎵嶈兘婊¤凍涓浗鐨勬墍鏈夋苯杞︼紵
6.鎯寵薄浣犵珯鍦ㄩ暅瀛愬墠錛岃闂紝涓轟粈涔堥暅瀛愪腑鐨勫獎璞″彲浠ラ鍊掑乏鍙籌紝鍗翠笉鑳介鍊掍笂涓嬶紵
7.涓轟粈涔堝湪浠諱綍鏃呴閲岋紝浣犳墦寮鐑按錛岀儹姘撮兘浼氱灛闂村炬郴鑰屽嚭錛?br>8.浣犳庢牱灝咵xcel鐨勭敤娉曡В閲婄粰浣犵殑濂跺ザ鍚紵
9.浣犳庢牱閲嶆柊鏀硅繘鍜岃璁′竴涓狝TM閾惰鑷姩鍙栨鏈猴紵
10.濡傛灉浣犱笉寰椾笉閲嶆柊瀛︿範涓縐嶆柊鐨勮綆楁満璇█錛屼綘鎵撶畻鎬庢牱鐫鎵嬫潵寮濮嬶紵
11.濡傛灉浣犵殑鐢熸動瑙勫垝涓墦綆楀湪5騫村唴鍙楀埌濂栧姳錛岄偅鑾峰彇璇ラ」濂栧姳鐨勫姩鏈烘槸浠涔堬紵瑙備紬鏄皝錛?br>12.濡傛灉寰蔣鍛婅瘔浣狅紝鎴戜滑鎵撶畻鎶曡祫浜旂櫨涓囩編鍏冩潵鍚姩浣犵殑鎶曡祫璁″垝錛屼綘灝嗗紑濮嬩粈涔堟牱鍟嗕笟璁″垝錛熶負浠涔堬紵
13.濡傛灉浣犺兘澶熷皢鍏ㄤ笘鐣岀殑鐢佃剳鍘傚晢闆嗗悎鍦ㄤ竴涓姙鍏閲岋紝鐒跺悗鍛婅瘔浠栦滑灝嗚寮鴻揩鍋氫竴浠朵簨錛岄偅浠朵簨灝嗘槸浠涔堬紵

絎笁緇?

1.浣犺宸ヤ漢涓轟綘宸ヤ綔7澶╋紝鍥炴姤鏄竴鏍歸噾鏉★紝榪欎釜閲戞潯騫沖垎鎴愮浉榪炵殑7孌碉紝浣犲繀欏誨湪姣忓ぉ緇撴潫鐨勬椂鍊欑粰浠栦滑涓孌甸噾鏉°傚鏋滃彧鍏佽浣犱袱嬈℃妸閲戞潯寮勬柇錛屼綘濡備綍緇欎綘鐨勫伐浜轟粯璐癸紵
2.鏈変竴杈嗙伀杞︿互姣忓皬鏃?5鍏噷鐨勯熷害紱誨紑鍖椾含鐩村騫垮窞錛屽悓鏃跺彟涓杈嗙伀杞︽瘡灝忔椂20鍏噷鐨勯熷害浠庡箍宸炲紑寰鍖椾含銆傚鏋滄湁涓鍙笩錛屼互30鍏噷姣忓皬鏃剁殑閫熷害鍜屼袱杈嗙伀杞﹀悓鏃跺惎鍔紝浠庡寳浜嚭鍙戯紝紕板埌鍙︿竴杈嗚濺鍚庡氨鍚戠浉鍙嶇殑鏂瑰悜榪斿洖鍘婚錛屽氨榪欐牱渚濇鍦ㄤ袱杈嗙伀杞︿箣闂存潵鍥炲湴椋烇紝鐩村埌涓よ締鐏濺鐩擱亣銆傝闂紝榪欏彧楦熷叡椋炶浜嗗闀跨殑璺濈錛?br>3.浣犳湁鍥涗釜瑁呰嵂涓哥殑緗愬瓙錛屾瘡涓嵂涓擱兘鏈変竴瀹氱殑閲嶉噺錛岃姹℃煋鐨勮嵂涓告槸娌¤姹℃煋鐨勮嵂涓哥殑閲嶉噺+1銆傚彧縐伴噺涓嬈★紝濡備綍鍒ゆ柇鍝釜緗愬瓙鐨勮嵂琚薄鏌撲簡錛?br>4.闂ㄥ涓変釜寮鍏沖垎鍒搴斿鍐呬笁鐩忕伅錛岀嚎璺壇濂斤紝鍦ㄩ棬澶栨帶鍒跺紑鍏蟲椂鍊欎笉鑳界湅鍒板鍐呯伅鐨勬儏鍐碉紝鐜板湪鍙厑璁歌繘闂ㄤ竴嬈★紝紜畾寮鍏沖拰鐏殑瀵瑰簲鍏崇郴錛?br>5.浜烘皯甯佷負浠涔堝彧鏈?銆?銆?銆?0鐨勯潰鍊鹼紵
6.浣犳湁涓や釜緗愬瓙浠ュ強50涓孩鑹插脊鐞冨拰50涓摑鑹插脊鐞冿紝闅忔満閫夊嚭涓涓綈瀛愶紝 闅忔満閫夊嚭涓涓脊鐞冩斁鍏ョ綈瀛愶紝鎬庝箞緇欏嚭綰㈣壊寮圭悆鏈澶х殑閫変腑鏈轟細錛熷湪浣犵殑璁″垝閲岋紝寰楀埌綰㈢悆鐨勫嚑鐜囨槸澶氬皯錛?br>7.緇欎綘涓ら6闈㈣壊瀛愶紝鍙互鍦ㄥ畠浠悇涓潰涓婂埢涓?-9浠繪剰涓涓暟瀛楋紝瑕佹眰鑳藉鐢ㄥ畠浠嫾鍑轟換鎰忎竴騫翠腑鐨勬棩鏈熸暟鍊?

絎洓緇?

絎竴棰?. 浜斾釜嫻風洍鎶㈠埌浜?00棰楀疂鐭籌紝姣忎竴棰楅兘涓鏍峰ぇ灝忓拰浠峰艱繛鍩庛備粬浠喅瀹氳繖涔堝垎錛?br>鎶界鍐沖畾鑷繁鐨勫彿鐮侊紙1銆?銆?銆?銆?錛?br>棣栧厛錛岀敱1鍙鋒彁鍑哄垎閰嶆柟妗堬紝鐒跺悗澶у琛ㄥ喅錛屽綋涓斾粎褰撹秴榪囧崐鏁扮殑浜哄悓鎰忔椂錛屾寜鐓т粬鐨勬柟妗?br>榪涜鍒嗛厤錛屽惁鍒欏皢琚墧榪涘ぇ嫻峰杺椴ㄩ奔
濡傛灉1鍙鋒鍚庯紝鍐嶇敱2鍙鋒彁鍑哄垎閰嶆柟妗堬紝鐒跺悗鍓╀笅鐨?浜鴻繘琛岃〃鍐籌紝褰撲笖浠呭綋瓚呰繃鍗婃暟鐨勪漢鍚?br>鎰忔椂錛屾寜鐓т粬鐨勬柟妗堣繘琛屽垎閰嶏紝鍚﹀垯灝嗚鎵斿叆澶ф搗鍠傞波楸?br>渚濇綾繪帹
鏉′歡錛氭瘡涓搗鐩楅兘鏄緢鑱槑鐨勪漢錛岄兘鑳藉緢鐞嗘櫤鍦板仛鍑哄垽鏂紝浠庤屽仛鍑洪夋嫨銆?br>闂錛氱涓涓搗鐩楁彁鍑烘庢牱鐨勫垎閰嶆柟妗堟墠鑳戒嬌鑷繁鐨勬敹鐩婃渶澶у寲錛?

絎簩棰?. 涓閬撳叧浜庨鏈哄姞娌圭殑闂錛屽凡鐭ワ細
姣忎釜椋炴満鍙湁涓涓補綆憋紝
椋炴満涔嬮棿鍙互鐩鎬簰鍔犳補錛堟敞鎰忔槸鐩鎬簰錛屾病鏈夊姞娌規満錛?br>涓綆辨補鍙緵涓鏋墮鏈虹粫鍦扮悆椋炲崐鍦堬紝
闂錛?br>涓轟嬌鑷沖皯涓鏋墮鏈虹粫鍦扮悆涓鍦堝洖鍒拌搗椋炴椂鐨勯鏈哄満錛岃嚦灝戦渶瑕佸嚭鍔ㄥ嚑鏋墮鏈猴紵錛堟墍鏈夐鏈轟粠鍚屼竴鏈哄満璧烽錛岃屼笖蹇呴』瀹夊叏榪斿洖鏈哄満錛屼笉鍏佽涓旈檷钀斤紝涓棿娌℃湁椋炴満鍦猴級

絎笁棰? 姹借濺鍔犳補闂
涓杈嗚澆娌?00鍗囩殑姹借濺浠嶢寮寰1000鍏噷澶栫殑B錛屽凡鐭ユ苯杞︽瘡鍏噷鑰楁補閲忎負1鍗囷紝A澶勬湁鏃犵┓澶氱殑娌癸紝鍏朵粬浠諱綍鍦扮偣閮芥病鏈夋補錛屼絾璇ヨ濺鍙互鍦ㄤ換浣曞湴鐐瑰瓨鏀炬補浠ュ涓漿錛岄棶浠嶢鍒癇鏈灝戦渶瑕佸灝戞補

絎洓棰? 鎺鋒澂闂
涓縐嶆澂瀛愶紝鑻ュ湪絎琋灞傝鎽旂牬錛屽垯鍦ㄤ換浣曟瘮N楂樼殑妤煎眰鍧囦細鐮達紝鑻ュ湪絎琈灞備笉鐮達紝鍒欏湪浠諱綍姣擬浣庣殑妤煎眰鍧囦細鐮達紝緇欎綘涓や釜榪欐牱鐨勬澂瀛愶紝璁╀綘鍦?00灞傞珮鐨勬ゼ灞備腑嫻嬭瘯錛岃姹傜敤鏈灝戠殑嫻嬭瘯嬈℃暟鎵懼嚭鎭板閥浼氫嬌鏉瓙鐮寸鐨勬ゼ灞傘?

絎簲棰? 鎺ㄧ悊娓告垙
鏁欐巿閫夊嚭涓や釜浠?鍒?鐨勬暟錛屾妸瀹冧滑鐨勫拰鍛婅瘔瀛︾敓鐢詫紝鎶婂畠浠殑縐憡璇夊鐢熶箼錛岃浠栦滑杞祦鐚滆繖涓や釜鏁?br>鐢茶錛氣滄垜鐚滀笉鍑衡?br>涔欒錛氣滄垜鐚滀笉鍑衡?br>鐢茶錛氣滄垜鐚滃埌浜嗏?br>涔欒錛氣滄垜涔熺寽鍒頒簡鈥?br>闂繖涓や釜鏁版槸澶氬皯

絎叚棰? 鐥呯嫍闂
涓涓綇瀹呭尯鍐呮湁100鎴蜂漢瀹訛紝姣忔埛浜哄鍏諱竴鏉$嫍錛屾瘡澶╁倣鏅氬ぇ瀹墮兘鍦ㄥ悓涓涓湴鏂歸仜鐙椼傚凡鐭ヨ繖浜涚嫍涓湁涓閮ㄥ垎鐥呯嫍錛岀敱浜庢煇縐嶅師鍥狅紝鐙楃殑涓諱漢鏃犳硶鍒ゆ柇鑷繁鐨勭嫍鏄惁鏄梾鐙楋紝鍗磋兘澶熷垎杈ㄥ叾浠栫殑鐙楁槸鍚︽湁鐥咃紝鐜板湪錛屼笂綰т紶鏉ラ氱煡錛岃姹備綇鎴峰鍐寵繖浜涚梾鐙楋紝騫朵笖涓嶅厑璁告寚璁や粬浜虹殑鐙楁槸鐥呯嫍錛堝氨鏄彧鑳藉垽鏂嚜宸辯殑錛夛紝榪囦簡7澶╀箣鍚庯紝鎵鏈夌殑鐥呯嫍閮借澶勫喅浜嗭紝闂紝涓鍏辨湁鍑犲彧鐥呯嫍錛熶負浠涔堬紵

絎竷棰? U2鍚堝敱鍥㈠湪17鍒嗛挓鍐呭緱璧跺埌婕斿敱浼氬満錛岄斾腑蹇呴渶璺ㄨ繃涓搴фˉ錛屽洓涓漢浠庢ˉ鐨勫悓涓绔嚭鍙戯紝浣犲緱甯姪浠栦滑鍒拌揪鍙︿竴绔紝澶╄壊寰堟殫錛岃屼粬浠彧鏈変竴鍙墜鐢電瓛銆備竴嬈″悓鏃舵渶澶氬彲浠ユ湁涓や漢涓璧瘋繃妗ワ紝鑰岃繃妗ョ殑鏃跺欏繀欏繪寔鏈夋墜鐢電瓛錛屾墍浠ュ氨寰楁湁浜烘妸鎵嬬數絳掑甫鏉ュ甫鍘伙紝鏉ュ洖妗ヤ袱绔傛墜鐢電瓛鏄笉鑳界敤涓㈢殑鏂瑰紡鏉ヤ紶閫掔殑銆傚洓涓漢鐨勬琛岄熷害鍚勪笉鍚岋紝鑻ヤ袱浜哄悓琛屽垯浠ヨ緝鎱㈣呯殑閫熷害涓哄噯銆侭ONO闇鑺?鍒嗛挓榪囨ˉ,EDGE闇鑺?鍒嗛挓榪囨ˉ,ADAM闇鑺?鍒嗛挓榪囨ˉ,LARRY闇鑺?0鍒嗛挓榪囨ˉ,浠栦滑瑕佸浣曞湪17鍒嗛挓鍐呰繃妗ュ憿錛?

絎叓棰? 鐩戠嫳閲屾湁100涓埧闂達紝姣忎釜鎴塊棿鍐呮湁涓鍥氱姱銆備竴澶╋紝鐩戠嫳闀胯錛屼綘浠嫳鎴垮鏈変竴鐢電伅錛屼綘浠湪鏀鵑鏃跺彲浠ユ帶鍒惰繖涓數鐏紙鐔勬垨浜級銆傛瘡澶╁彧鑳芥湁涓涓漢鍑烘潵鏀鵑錛屽茍涓旈槻椋庢槸闅忔満鐨勩傚鏋滃湪鏈夐檺鏃墮棿鍐咃紝浣犱滑涓殑鏌愪漢鑳藉鎴戣錛氣滄垜鏁繚璇侊紝鐜板湪姣忎釜浜洪兘宸茬粡鑷沖皯鏀捐繃涓嬈¢浜嗐傗濇垜灝辨斁浜嗕綘浠紒闂洑鐘滑瑕侀噰鍙栦粈涔堢瓥鐣ユ墠鑳借鐩戠嫳闀挎斁鎺夛紵濡傛灉閲囩敤浜嗚繖縐嶇瓥鐣ワ紝澶ц嚧澶氫箙浠栦滑鍙互琚噴鏀撅紵

絎簲緇?

1.鏌愭墜鏈哄巶瀹剁敱浜庤璁″け璇紝鏈夊彲鑳介犳垚鐢墊睜瀵垮懡姣斿師鏉ヨ璁$殑瀵垮懡鐭竴鍗婏紙涓嶆槸鍐叉斁鐢墊椂
闂達級錛岃В鍐蟲柟妗堝氨鏄厤璐規洿鎹㈢數姹犳垨緇?0鍏冭喘涔拌鍘傚鏂版墜鏈虹殑鎶樻崲鍒搞傝緇欐墍鏈夊凡璐拱鐨?br>鐢ㄦ埛鍐欎俊鍛婅瘔瑙e喅鏂規銆?br>2.涓楂樺眰棰嗗鍦ㄥ弬瑙傛煇鍗氱墿棣嗘椂錛屽悜鍗氱墿棣嗛鍛樺皬鐜嬭浜嗕竴鍧楁槑浠g殑鍩庣爾浣滀負綰康錛屾寜鍥藉
瑙勫畾錛屼換浣曚漢涓嶅緱灝嗗崥鐗╅鏀惰棌鍝佸彉涓虹鏈夈傚崥鐗╅棣嗛暱闇瑕佸浣曞啓淇$粰榪欎綅棰嗗錛屽皢鍩庣爾
鍙栧洖銆?br>3.钀ヤ笟鍛樺皬濮愮敱浜庡伐浣滃け璇紝灝?涓囧厓鐨勭瑪璁版湰鐢佃剳浠?.2涓囧厓閿欏崠緇欐潕鍏堢敓錛岀帇灝忓鐨勭粡鐞?br>鎬庝箞鍐欎俊緇欐潕鍏堢敓璇曞浘灝嗛挶瑕佸洖鏉ワ紵
4.緇欎綘涓嬈炬柊鐮斿埗鐨勬墜鏈猴紝濡傛灉浣犳槸嫻嬭瘯緇勭殑緇勯暱錛屼綘浼氬浣曟祴璇曪紵
5.濡備綍涓哄嚱鏁癷nt atoi(const char * pstr)緙栧啓嫻嬭瘯鍚戦噺錛?

絎叚緇?

1.閾捐〃鍜屾暟緇勭殑鍖哄埆鍦ㄥ摢閲岋紵
2.緙栧啓瀹炵幇閾捐〃鎺掑簭鐨勪竴縐嶇畻娉曘傝鏄庝負浠涔堜綘浼氶夋嫨鐢ㄨ繖鏍風殑鏂規硶錛?br>3.緙栧啓瀹炵幇鏁扮粍鎺掑簭鐨勪竴縐嶇畻娉曘傝鏄庝負浠涔堜綘浼氶夋嫨鐢ㄨ繖鏍風殑鏂規硶錛?br>4.璇風紪鍐欒兘鐩存帴瀹炵幇char * strcpy(char * pstrDest,const char * pstrSource)鍑芥暟鍔熻兘鐨勪唬鐮併?br>5.緙栧啓鍙嶈漿瀛楃涓茬殑紼嬪簭錛岃姹備紭鍖栭熷害銆佷紭鍖栫┖闂淬?br>6.鍦ㄩ摼琛ㄩ噷濡備綍鍙戠幇寰幆閾炬帴錛?br>7.緇欏嚭媧楃墝鐨勪竴涓畻娉曪紝騫跺皢媧楀ソ鐨勭墝瀛樺偍鍦ㄤ竴涓暣褰㈡暟緇勯噷銆?br>8.鍐欎竴涓嚱鏁幫紝媯鏌ュ瓧絎︽槸鍚︽槸鏁存暟錛屽鏋滄槸錛岃繑鍥炲叾鏁存暟鍊箋傦紙鎴栬咃細鎬庢牱鍙敤4琛屼唬鐮?br>9.緇欏嚭涓涓嚱鏁版潵杈撳嚭涓涓瓧絎︿覆鐨勬墍鏈夋帓鍒椼?br>10.璇風紪鍐欏疄鐜皏oid * malloc(int)鍐呭瓨鍒嗛厤鍑芥暟鍔熻兘涓鏍風殑浠g爜銆?br>11.緇欏嚭涓涓嚱鏁版潵澶嶅埗涓や釜瀛楃涓睞鍜孊銆傚瓧絎︿覆A鐨勫悗鍑犱釜瀛楄妭鍜屽瓧絎︿覆B鐨勫墠鍑犱釜瀛楄妭閲嶅彔銆?br>12.鎬庢牱緙栧啓涓涓▼搴忥紝鎶婁竴涓湁搴忔暣鏁版暟緇勬斁鍒頒簩鍙夋爲涓紵
13.鎬庢牱浠庨《閮ㄥ紑濮嬮愬眰鎵撳嵃浜屽弶鏍戠粨鐐規暟鎹紵璇風紪紼嬨?br>14.鎬庢牱鎶婁竴涓摼琛ㄦ帀涓『搴忥紙涔熷氨鏄弽搴忥紝娉ㄦ剰閾捐〃鐨勮竟鐣屾潯浠跺茍鑰冭檻絀洪摼琛級錛?--
15.璇風紪鍐欒兘鐩存帴瀹炵幇int atoi(const char * pstr)鍑芥暟鍔熻兘鐨勪唬鐮併?

---------------------------------------------------------------------------------------

絎竴緇勯絳旀錛?

1錛変笁鏍圭懷錛岀涓鏍圭偣鐕冧袱绔紝絎簩鏍圭偣鐕冧竴绔紝絎笁鏍逛笉鐐?br>絎竴鏍圭懷鐑у畬錛?0鍒嗛挓錛夊悗錛岀偣鐕冪浜屾牴緇崇殑鍙︿竴绔紝絎簩鏍圭懷鐑у畬錛?5鍒嗛挓錛夊悗錛岀偣鐕冪涓夋牴緇沖瓙涓ょ錛岀涓夋牴緇崇儳瀹岋紙1灝忔椂15鍒嗭級鍚庯紝璁℃椂瀹屾垚
2錛夋牴鎹娊灞夊師鐞嗭紝4涓?br>3錛?鍗囪婊★紱3鍗?銆?鍗囷紙鍏ㄦ敞鍏ワ級錛?鍗囪婊★紱3鍗?銆?鍗囷紙鍓?鍗囷級錛?鍗囧掓帀錛?鍗?銆?鍗囷紙娉ㄥ叆1鍗囷級錛?鍗囪婊★紱3鍗?銆?鍗囷紱瀹屾垚錛堝彟錛氬彲鐢ㄥ洖婧硶緙栫▼姹傝В錛?br>4錛夐棶鍏朵腑涓浜猴細鍙﹀涓涓漢浼氳鍝竴鏉¤礬鏄氬線璇氬疄鍥界殑錛熷洖絳旇呮墍鎸囩殑閭f潯璺繀鐒舵槸閫氬線璇磋皫鍥界殑銆?br>5錛?2涓悆錛?br>絎竴嬈★細4錛? 濡傛灉騫充簡錛?br>  閭d箞鍓╀笅鐨勭悆涓彇3鏀懼乏杈?鍙?涓ソ鐞冩斁鍙寵竟錛岀О錛?br>    濡傛灉宸﹁竟閲嶏紝閭d箞鍙栦袱涓悆縐頒竴涓嬶紝鍝釜閲嶅摢涓槸嬈″搧錛屽鉤鐨勮瘽絎笁涓噸錛屾槸嬈″搧錛岃交鐨勮瘽鍚岀悊
    濡傛灉騫充簡錛岄偅涔堝墿涓嬩竴涓鍝侊紝榪樺彲鏍規嵁闇瑕佺О鍑烘鍝佹瘮姝e搧杞繪垨鑰呴噸
濡傛灉涓嶅鉤錛?br>  閭d箞涓嶅Θ璁懼乏杈歸噸鍙寵竟杞伙紝涓轟簡渚夸簬璇存槑錛屽皢宸﹁竟4棰楃О涓洪噸鐞冿紝鍙寵竟4棰楃О涓鴻交鐞冿紝鍓╀笅4棰楃О涓哄ソ鐞?br>  鍙栭噸鐞?棰楋紝杞葷悆2棰楁斁鍦ㄥ乏渚э紝鍙充晶鏀?棰楀ソ鐞冨拰涓棰楄交鐞?br>  濡傛灉宸﹁竟閲?br>      縐伴偅涓ら閲嶇悆錛岄噸鐨勪竴涓鍝侊紝騫崇殑璇濆彸杈硅交鐞冩鍝?br>  濡傛灉鍙寵竟閲?br>      縐板乏杈逛袱棰楄交鐞冿紝杞葷殑涓涓鍝?br>  濡傛灉騫?br>      縐板墿涓嬩袱棰楅噸鐞冿紝閲嶇殑涓涓鍝侊紝騫崇殑璇濆墿涓嬮偅棰楄交鐞冩鍝?br>13涓悆錛?br>絎竴嬈★細4錛?錛屽鏋滃鉤浜?br>  鍓?棰楃悆鐢ㄤ笂闈㈢殑鏂規硶浠嶆棫鑳芥壘鍑烘鍝侊紝鍙槸涓嶈兘鐭ラ亾嬈″搧鏄噸鏄交
濡傛灉涓嶅鉤錛屽悓涓?br>6錛?br>o   o   o
  o o o
o   o   o
7錛?br>23嬈★紝鍥犱負鍒嗛拡瑕佽漿24鍦堬紝鏃墮拡鎵嶈兘杞?鍦堬紝鑰屽垎閽堝拰鏃墮拡閲嶅悎涓ゆ涔嬮棿鐨勯棿闅旀樉鐒?gt;1灝忔椂錛屽畠浠湁23嬈¢噸鍚堟満浼氾紝姣忔閲嶅悎涓閽堟湁涓嬈¢噸鍚堟満浼氾紝鎵浠ユ槸23嬈?br>閲嶅悎鏃墮棿鍙互瀵圭収鎵嬭〃姹傚嚭錛屼篃鍙垪鏂圭▼姹傚嚭
8錛?br>鍦ㄥ湴鐞冭〃闈㈢鏍戯紝鍋氫竴涓湴鐞冨唴鎺ョ殑姝e洓闈綋錛屽唴鎺ョ偣鍗充負鎵姹?

絎簩緇?鏃犳爣鍑嗙瓟妗?

絎笁緇?

1. 鍒嗘垚1,2,4涓夋錛岀涓澶╃粰1錛岀浜屽ぉ緇?鍙栧洖1錛岀3澶╃粰1錛岀4澶╃粰4鍙栧洖1銆?錛岀5澶╃粰1錛岀6澶╃粰2鍙栧洖1錛岀涓冨ぉ緇?
2. 姹傚嚭鐏濺鐩擱亣鏃墮棿錛岄笩閫熶箻浠ユ椂闂村氨鏄笩椋炶鐨勮窛紱?br>3. 鍥涗釜緗愬瓙涓垎鍒彇1,2,3,4棰楄嵂涓革紝縐板嚭姣旀甯擱噸澶氬皯錛屽嵆鍙垽鏂嚭閭d釜緗愬瓙鐨勮嵂琚薄鏌?br>4. 涓変釜寮鍏沖垎鍒細鍏籌紝寮錛屽紑10鍒嗛挓錛岀劧鍚庤繘灞嬶紝鏆椾笖鍑夌殑涓哄紑鍏?鎺у埗鐨勭伅錛屼寒鐨勪負寮鍏?鎺у埗鐨勭伅錛屾殫涓旂儹鐨勪負寮鍏?鎺у埗鐨勭伅
5. 鍥犱負鍙互鐢?錛?錛?錛?0緇勫悎鎴愪換浣曢渶瑕佺殑璐у竵鍊鹼紝鏃ュ父涔犳儻涓?0榪涘埗
6. 棰樻剰涓嶇悊瑙?..*_*
7. 012345 0126(9)78

絎洓緇?閮芥槸寰堥毦鐨勯鐩?

絎竴棰橈細97 0 1 2 0 鎴栬?97 0 1 0 2 錛堟彁紺猴細鍙敤閫嗘帹娉曟眰鍑猴級

絎簩棰橈細3鏋墮鏈?鏋舵錛岄娉曪細
ABC 3鏋跺悓鏃惰搗椋烇紝1/8澶勶紝C緇橝B鍔犳弧娌癸紝C榪旇埅錛?/4澶勶紝B緇橝鍔犳弧娌癸紝B榪旇埅錛孉鍒拌揪1/2澶勶紝C浠庢満鍦哄線鍙︿竴鏂瑰悜璧烽錛?/4澶勶紝C鍚屽凡緇忕┖娌圭鐨凙騫沖垎鍓╀綑娌歸噺錛屽悓鏃禕浠庢満鍦鴻搗椋烇紝AC鍒?/8澶勫悓B騫沖垎鍓╀綑娌歸噺錛屽垰濂?鏋墮鏈哄悓鏃惰繑鑸傛墍浠ユ槸3鏋墮鏈?鏋舵銆?

絎笁棰橈細闇瑕佸緩绔嬫暟瀛︽ā鍨?br>錛堟彁紺猴紝涓ユ牸璇佹槑璇ユā鍨嬫渶浼樻瘮杈冮夯鐑︼紝浣嗙‘瀹炲彲璇侊紝澶ц儐鐚滄兂鏄В棰樺叧閿級
棰樼洰鍙綊緇撲負姹傛暟鍒?an=500/(2n+1) n=0,1,2,3......鐨勫拰Sn浠涔堟椂鍊欏ぇ浜庣瓑浜?000,瑙e緱n>6
褰搉=6鏃訛紝S6=977.57
鎵浠ョ涓涓腑杞偣紱昏搗濮嬩綅緗窛紱諱負1000-977.57=22.43鍏噷
鎵浠ョ涓嬈′腑杞箣鍓嶅叡鑰楁補 22.43*(2*7+1)=336.50鍗?br>姝ゅ悗姣忔涓漿鑰楁補500鍗?br>鎵浠ユ昏楁補閲忎負7*500+336.50=3836.50鍗?

絎洓棰橈細闇瑕佸緩绔嬫暟瀛︽ā鍨?br>棰樼洰鍙綊緇撲負姹傝嚜鐒舵暟鍒楃殑鍜孲浠涔堟椂鍊欏ぇ浜庣瓑浜?00錛岃В寰梟>13
絎竴涓澂瀛愬彲鑳界殑鎶曟幏妤煎眰鍒嗗埆涓猴細14錛?7錛?9錛?0錛?0錛?9錛?7錛?4錛?0錛?5錛?9錛?00

絎簲棰橈細3鍜?錛堝彲涓ユ牸璇佹槑錛?br>璁句袱涓暟涓簄1錛宯2錛宯1>=n2錛岀敳鍚埌鐨勬暟涓簄=n1+n2錛屼箼鍚埌鐨勬暟涓簃=n1*n2
璇佹槑n1=3錛宯2=4鏄敮涓瑙?br>璇佹槑錛氳璇佷互涓婂懡棰樹負鐪燂紝涓嶅Θ鍏堣瘉n=7
1)蹇呰鎬э細
   i) n>5 鏄樉鐒剁殑錛屽洜涓簄<4涓嶅彲鑳斤紝n=4鎴栬卬=5鐢查兘涓嶅彲鑳藉洖絳斾笉鐭ラ亾
   ii) n>6 鍥犱負濡傛灉n=6鐨勮瘽錛岄偅涔堢敳铏界劧涓嶇煡閬擄紙涓嶇‘瀹?+4榪樻槸3+3錛変絾鏄棤璁烘槸2錛?榪樻槸3錛?涔欓兘涓嶅彲鑳借涓嶇煡閬擄紙m=8鎴栬卪=9鐨勮瘽涔欒涓嶇煡閬撴槸娌℃湁閬撶悊鐨勶級
  iii) n<8 鍥犱負濡傛灉n>=8鐨勮瘽錛屽氨鍙互灝唍鍒嗚В鎴?n=4+x 鍜?n=6+(x-2)錛岄偅涔坢鍙互鏄?x涔熷彲浠ユ槸6(x-2)鑰?x=6(x-2)鐨勫繀瑕佹潯浠舵槸x=6鍗硁=10錛岄偅鏍穘鍙堝彲浠ュ垎瑙f垚8+2錛屾墍浠ユ諱箣褰搉>=8鏃訛紝n鑷沖皯鍙互鍒嗚В鎴愪袱縐嶄笉鍚岀殑鍚堟暟涔嬪拰錛岃繖鏍蜂箼璇翠笉鐭ラ亾鐨勬椂鍊欙紝鐢插氨娌℃湁鐞嗙敱椹笂璇寸煡閬撱?br>   浠ヤ笂璇佹槑浜嗗繀瑕佹?br>2)鍏呭垎鎬?br>    褰搉=7鏃訛紝n鍙互鍒嗚В鎴?+5鎴?+4
    鏄劇劧2+5涓嶇鍚堥鎰忥紝鑸嶅幓錛屽鏄撳垽鏂嚭3+4絎﹀悎棰樻剰錛宮=12錛岃瘉姣?br>浜庢槸寰楀埌n=7 m=12 n1=3 n2=4鏄敮涓瑙c?

絎叚棰橈細7鍙紙鏁板褰掔撼娉曡瘉鏄庯級
1錛夎嫢鍙湁1鍙梾鐙楋紝鍥犱負鐥呯嫍涓諱漢鐪嬩笉鍒版湁鍏朵粬鐥呯嫍錛屽繀鐒朵細鐭ラ亾鑷繁鐨勭嫍鏄梾鐙楋紙鍓嶆彁鏄竴瀹氬瓨鍦ㄧ梾鐙楋級錛屾墍浠ヤ粬浼氬湪絎竴澶╂妸鐥呯嫍澶勫喅銆?br>2錛夎鏈塳鍙梾鐙楃殑璇濓紝浼氬湪絎琸澶╄澶勫喅錛岄偅涔堬紝濡傛灉鏈塳+1鍙紝鐥呯嫍鐨勪富浜哄彧浼氱湅鍒発鍙梾鐙楋紝鑰岀k澶╂病鏈変漢澶勫喅鐥呯嫍錛岀梾鐙椾富浜哄氨浼氬湪絎琸+1澶╃煡閬撹嚜宸辯殑鐙楁槸鐥呯嫍錛屼簬鏄梾鐙楀湪絎琸+1澶╄澶勫喅
3錛夌敱1錛?錛夊緱錛岃嫢鏈塶鍙梾鐙楋紝蹇呯劧鍦ㄧn澶╄澶勫喅

絎竷棰橈細錛堟彁紺猴細鍙敤鍥捐鏂規硶瑙e喅錛?br>BONO&EDGE榪囷紙2鍒嗭級錛孊ONO灝嗘墜鐢靛甫鍥烇紙1鍒嗭級錛孉DAM&LARRY榪囷紙10鍒嗭級錛孍DGE灝嗘墜鐢靛甫鍥烇紙2鍒嗭級錛孊ONO&EDGE榪囷紙2鍒嗭級 2+1+10+2+2=17鍒嗛挓

絎叓棰橈細
綰﹀畾濂戒竴涓漢浣滀負鎶ュ憡浜猴紙鍙互鏄涓涓斁椋庣殑浜猴級
瑙勫垯濡備笅錛?br>1銆佹姤鍛婁漢鏀鵑鐨勬椂鍊欏紑鐏茍鏁板紑鐏鏁?br>2銆佸叾浠栦漢絎竴嬈¢亣鍒板紑鐫鐏斁椋庢椂錛屽皢鐏叧闂?br>3銆佸綋鎶ュ憡浜虹100嬈″紑鐏殑鏃跺欙紝鍘誨悜鐩戠嫳闀挎姤鍛婏紝瑕佹眰鐩戠嫳闀挎斁浜?.....
鎸夌収姒傜巼澶х害30騫村悗錛?0000澶╋級浠栦滑鍙互琚噴鏀?

絎簲緇勬棤鏍囧噯絳旀

絎叚緇勯儴鍒嗛鍙傝冪瓟妗堬細
4.
char * strcpy(char * pstrDest,const char * pstrSource)
{
assert((pstrDest!=NULL)&&(pstrSource!=NULL));

char * pstr=pstrDest;
while((*(pstrDest++)=*(pstrSource++))!='\0');
        return pstr;
}
5.
char * strrev(char * pstr)
{
assert(pstr!=NULL);
char * p=pstr;
char * pret=pstr;
while(*(p++)!='\0');
p--;
char tmp;
while(p>pstr)
{
  tmp=*p;
  *(p--)=*(pstr);
  *(pstr++)=tmp; 
}
return pret;



rikisand 2010-03-22 23:21 鍙戣〃璇勮
]]>
娣卞叆鎺㈢儲C++瀵硅薄妯″瀷璇諱功絎旇 (鍏?http://m.shnenglu.com/zqsand/archive/2010/03/19/110113.htmlrikisandrikisandFri, 19 Mar 2010 08:55:00 GMThttp://m.shnenglu.com/zqsand/archive/2010/03/19/110113.htmlhttp://m.shnenglu.com/zqsand/comments/110113.htmlhttp://m.shnenglu.com/zqsand/archive/2010/03/19/110113.html#Feedback0http://m.shnenglu.com/zqsand/comments/commentRss/110113.htmlhttp://m.shnenglu.com/zqsand/services/trackbacks/110113.html鎵ц鏈熻涔夊 RunTime Semantics

if( yy == xx.getValue() ) 鈥?/font>

X xx; Y yy;

class Y{

public:

Y();  ~Y();  bool operator == (constY& )const;

};

class X{

public:

X(); ~X(); operator Y()const; //閲嶈澆杞崲綾誨瀷鎿嶄綔絎?蹇呴』鎴愬憳涓嶈兘鏈夊弬鏁頒笉鑳芥湁榪斿洖鍊艱緇嗗湪 http://m.shnenglu.com/zqsand/archive/2010/03/15/109748.html閲岄潰鏈変粙緇?/font>

X getValue();

};

鐪嬬湅涓婇潰鐨勮〃杈懼紡鎬庝箞鎵ц鐨剘~~

棣栧厛絳夊彿榪愮畻絎︾殑鍙傛暟紜畾  if(yy.operator==(xx.getValue()));

Y鐨?= 闇瑕佷竴涓猋鍨嬬殑鍙傛暟錛屼絾鏄痝etvalue寰楀埌鐨勬槸涓涓猉鍨嬬殑錛屽鏋滄病鏈塜鍒癥鐨勮漿鍨嬫柟娉曪紝榪欎釜寮忓瓙鏄敊鐨剘 鑰屾伆濂絏鏈変釜綾誨瀷杞崲絎

if(yy.operator == (xx.getValue().operator Y()))

澧炲姞鐨勪唬鐮侀兘鏄紪璇戝櫒榛橀粯涓烘垜浠姞涓婄殑~~~

娉ㄦ剰鍦ㄨ繖涓繃紼嬩腑錛屾垜浠渶瑕佷竴涓復鏃剁殑Xobject 鍌ㄥ瓨 getValue榪斿洖鍊?X temp1 = xx.getValue()

涓涓猚lass Y object 鍌ㄥ瓨 operator Y()榪斿洖鍊?Y temp2 = temp1.operator Y();

涓涓?int 鏀劇疆 絳夊彿榪斿洖鍊?nbsp; int tmp3 = yy.operator == (temp2);

鏈鍚庢瀽鏋勫嚱鏁頒細瀹炴柦鍦ㄦ瘡涓涓復鏃禼lass object涓?

鎵浠ワ紝鎴戜滑鐨勪唬鐮佸彉鎴愶細

{

X temp1 = xx.getValue();Y temp2 = temp1.operator Y();int tmp3 = yy.operator == (temp2);

if(tmp3)  dosth```

tmp2.Y::~Y();

tmp1.X::~X();

}

surprise~~-----------------------------------------------------------------------

6.1-瀵硅薄鐨勬瀯閫犲拰鏋愭瀯

路涓鑸潵璇達紝dtor浼氳鏀懼湪姣忎竴涓寮鐐癸紙object 榪樺瓨媧伙級涔嬪墠 錛屾墍浠ワ紝濡傛灉涓涓尯孌墊垨鑰呭嚱鏁版湁澶氫釜紱誨紑鐐癸紝閭d箞姣忎竴涓猺eturn 紱誨紑鐐歸兘瑕佹彃鍏ヤ竴涓猟tor浜嗐傚洜姝ゆ垜浠竴鑸敖閲忔斁緗畂bject鍦ㄤ嬌鐢ㄥ畠鐨勭▼搴忓尯孌甸檮榪戯紝鑺傜渷涓嶅繀瑕佺殑瀵硅薄浜х敓涓庢懅姣佹搷浣溿?/font>

路鍏ㄥ眬瀵硅薄錛氬叏灞瀵硅薄濡傛灉鏈塩tor鎴栬卍tor鐨勮瘽闇瑕侀潤鎬佺殑鍒濆鍖栨搷浣滃拰鍐呭瓨閲婃斁鎿嶄綔銆俢++涓叏灞瀵硅薄鏀懼湪data segment涓紝濡傛灉涓嶆槑紜寚瀹氬鹼紝鍐呭瓨鍐呭涓?.

浣嗘槸ctor蹇呴』絳夊埌紼嬪簭startup鍚庢墠鑳藉疄鏂姐傜敱浜庡繀欏誨涓涓斁鍦╠atasegment 涓殑object鍒濆鍖栬〃杈懼紡evaluate 錛屾墍浠bject闇瑕侀潤鎬佸垵濮嬪寲

涓縐嶇瓥鐣ワ紙cfont 鐨?munch錛?/font>

涓烘瘡涓涓渶瑕侀潤鎬佸垵濮嬪寲鐨勬。妗堜駭鐢熶竴涓?nbsp; _sti()鍑芥暟錛屽唴甯﹀繀瑕佺殑ctor璋冪敤鎿嶄綔鎴栬卛nline expansions銆?綾諱技鐨勪駭娑╀細緇欎綘涓涓猻td()鍑芥暟璋冪敤dtor

涓涓猒main()鍑芥暟璋冪敤sti 涓涓?exit()鍑芥暟璋冪敤_std()

鐒跺悗cfont鍦ㄦ垜浠殑紼嬪簭涓畨鎻掑 _main _exit 鐨勮皟鐢ㄣ?鏈鍚庨渶瑕佽В鍐崇殑鏄浣曟敹闆嗗悇涓璞$殑sti鍜宻td銆俢font浣跨敤浜唍m鍛戒護 錛?鎵撳嵃鍑虹鍙瘋〃鏍?鐩爣鏂囦歡鐨勭鍙瘋〃)錛岀劧鍚巑unch浼氭悳绱㈡墍鏈夌敤sti鎴栬卻td寮澶寸殑鐩爣鍑芥暟錛屾妸浠栦滑璁板綍鍒頒竴涓〃鏍鹼紝褰搈ain鍜宔xit璋冪敤鏃跺欎究鍒╄〃鏍煎嵆鍙?/font>

淇敼鐗堟湰鐨勬柟娉曟槸錛歴ystem V涓紝coff鏍煎紡鐨勭洰鏍囨枃浠訛紝媯楠屽彲鎵ц鏂囦歡錛屾壘鍑烘湁鐫_linknodes騫朵笖鍐呭甫涓涓寚閽堟寚鍚?sti 鍜宻td鍑芥暟鐨勬枃浠訛紝鎶婁粬浠兘涓茶仈璧鋒潵錛屾帴涓嬫潵鎶婇摼琛ㄥご緇撶偣璁劇疆涓轟竴涓叏灞鐨刜head object (瀹氫箟鍦ㄦ柊鐨?patch runtime library)錛岃繖涓猯ibrary涓湁涓縐嶄笉鍚岀殑_main _exit 浠栦滑浼氫互head涓鴻搗鐐癸紝閬嶅巻閾捐〃錛岃皟鐢╯ti鍜宻td銆?/font>

瀹為檯涓婄幇鍦ㄧ殑ELF鏍煎紡錛屾湁init 鍜?fini涓や釜section錛屽畬鎴愰潤鎬佸垵濮嬪寲鍜岄噴鏀炬搷浣溿傜紪璇戝櫒璁懼畾鐨剆tartup鍑芥暟浼氬畬鎴愬鉤鍙扮壒瀹氱殑鏀寔

virtual base class 鐨勬寚閽堟垨鑰呭紩鐢ㄥ瓨鍙杤irtual base class subobject錛屾槸涓縐嶅彧鏈夊湪鎵ц鏈熸墠鑳藉姞浠ョ‘瀹氱殑鎿嶄綔銆傛墍浠ワ紝緙栬瘧鍣ㄩ渶瑕佹敮鎸乧lass object 鐨勯潤鎬佸垵濮嬪寲錛岃嚦灝戞兜鐩杘bject鐨勬寚閽堝拰reference銆?/font>

灞閮ㄩ潤鎬佸璞?/font>

const Matrix& identity(){

    static Matrix mat_identity;

    return mat_identity;

}

mat_identity鐨刢tor蹇呴』鍙墽琛屼竴嬈★紝mat_identity鐨刣tor蹇呴』鍙墽琛屼竴嬈?/font>

緙栬瘧鍣ㄥ彧鍦╥dentity琚皟鐢ㄧ殑鏃跺欐墠鏋勯爉at_identity錛岃繖鏍烽伩鍏嶅鏋滀笉琚皟鐢ㄤ篃闇瑕佹瀯閫犳墍鏈夊璞°傚悓鏃剁紪璇戝櫒寮曞叆鏉′歡寮忚В鏋悀涔熷氨鏄鏋滄瀯閫犱簡鍒欒В鏋愪箣

瀵硅薄鏁扮粍錛?/font>

Points knots[10];

濡傛灉Points娌℃湁瀹氫箟ctor鍜宒tor鍙鍒嗛厤絀洪棿鍗沖彲

濡傛灉鏈塪efault ctor 錛宑tor蹇呴』瀹炴柦浜庢瘡涓厓绱犺韓涓妦榪欐槸鐢眗untime library 瀹屾垚鐨勩?cfont涓?鎴戜滑浣跨敤vec_new()鍑芥暟  MS鍜孲un鎻愪緵涓や釜鍑芥暟錛屼竴涓敤鏉ュ鐞?vbs鐨刢lass 涓涓鐞嗗唴甯ase class 鐨刢lass錛屽悗鑰呬負 vec_vnew() 鍑芥暟鍘熷瀷鍩烘湰濡備笅

void* vec_new(void *array,size_t elem_size,int elem_count,void (*ctor)(void*),void(*dtor)(void*,char)))

array濡傛灉鏄?錛屾暟緇勭敱new鍒嗛厤涓巋eap錛?vec_new(&knots,sizeof(Point),10,&Point::Point,0);

6.2 new 鍜?delete 榪愮畻絎?

int *pi  = new int(5);

鎵ц姝ラ錛?/font>

int* pi = __new (sizeof(int));

*pi = 5;

int *pi;

if(pi = __new(sizeof(int)))

   *pi=5;

delete pi;

if(pi!=0)

__delete (pi);

娉ㄦ剰pi騫朵笉浼氳嚜鍔ㄦ竻闄や負0錛?/font>

CTOR

Point3d * origin=new Point3d;

if(origin = __new(sizeof(Point3d))){

try{

   origin = Point3d::Point3d(origin);   

}

calch(鈥?{

__delete(origin);

throw;//涓婁紶exception

}

}

DTOR

delete origin;

if(origin!=0){

  Point3d::~Point3d(origin);

   __delete(origin);

}

涓縐峫ibrary瀵筺ew鐨勮璁★細~~

extern void* operator new(size_t size){

if(size==0)size=1;

void *last_alloc;

while(!(last_alloc=malloc(size))){

if(_new_handler) (*_new_handler)();

else return 0;

}

return last_alloc;

}

铏界劧new T[0];鏄悎娉曠殑錛屼絾鏄璦瑕佹眰姣忔瀵筺ew鐨勮皟鐢ㄥ繀欏昏繑鍥炰竴涓嫭涓鏃犱簩鐨勬寚閽堬紝瑙e喅璇ラ棶棰樼殑浼犵粺鏂規硶鏄紶鍥炰竴涓寚閽堬紝鎸囧悜榛樿涓?byte鐨勫唴瀛樺尯鍧椼傛墍浠ize琚涓?.鐒跺悗榪欑璁捐鍏佽浣跨敤鑰呮彁渚涗竴涓睘浜庤嚜宸辯殑_new_handler() 鍑芥暟銆?/font>

extern void operator delete (void *ptr) { if(ptr)free (char*)ptr;}

閽堝鏁扮粍鐨刵ew 璇箟錛?/font>

int *p_array = new int[5];

榪欐椂鍊?vec_new()涓嶄細鐪熸璋冪敤錛屽洜涓猴紝瀹冪殑涓昏鍔熻兘鏄妸default ctor 瀹炴柦浜巆lass object鏁扮粍鐨勬瘡涓厓绱犺韓涓娿俷ew榪愮畻絎︿細琚皟鐢細

int *p_array = (int*) __new(5*sizeof(int));

濡傛灉鏁扮粍鐨刢lass object 鏈塪efault ctor vec_new鎵嶄細琚皟鐢ㄣ?/font>

Point3d *p_array = new Point3d[10];緙栬瘧鎴?

Point3d *p_array = vec_new(0,sizeof(Point3d),10,&point3d::Point3d,&Point3d::~Point3d);

涓埆鏁扮粍鏋勯犲鏋渆xception鍙戠敓錛宒tor琚紶杈撶粰vec_new 錛屽凡緇忔瀯閫犵殑object闇瑕乨tor 瀹炴柦銆?/font>

delete 鏃跺欙紝寮濮嬮渶瑕佺▼搴忓憳鎸囧畾澶у皬錛屽悗鏉ョ紪璇戝櫒寮濮嬩笉閫傜敤紼嬪簭鍛樻寚瀹氱殑錛岃屾槸鍙渶瑕佸啓delete [] ptr 鍗沖彲銆?/font>

濡備綍璁板綍鏁扮粍澶у皬鍛細

涓縐嶆柟娉曞湪vecnew榪斿洖鐨勫唴瀛樺潡閰嶇疆涓涓澶栫殑word錛屽ぇ灝忔斁鍦ㄥ叾涓?/font>

濡傛灉

class Point {public:virtual ~Point (){}};

class Point3d : public Point {public:virtual ~Point3d(){}};

濡傛灉Point *ptr = new Point3d[10];

褰撴垜浠琩elete [] ptr;鏃跺欏彧鏈?Point::~Point琚帀鐢╜```

鍦╲c閲屾暡浜嗕唬鐮侀獙璇佺‘瀹炲姝~~

瀹炴柦浜庢暟緇勪笂鐨刣tor鏄牴鎹氦緇檝ec_delete()鍑芥暟鐨勮鍒犻櫎鎸囬拡綾誨瀷鐨刣tor錛屼篃灝辨槸point鐨刣tor錛屾瘡涓涓厓绱犲ぇ灝忎篃琚竴璧蜂紶浜嗚繃鍘匯?/font>

濡備綍閬垮厤錛?/font>

閬垮厤涓涓猙ase class 鎸囬拡鎸囧悜涓涓猟erived class 鐨勬暟緇勩傚鏋滅湡鐨勮榪欎箞鍐欑湅浠g爜鍚?/font>

class point{
public:
    int p;
    point(){cout<<"point ctor"<<endl;}
    ~point(){cout<<"point dtor"<<endl;}
};
class point3d:public point{
public:
    int q;
    point3d(){cout<<"point3d ctor"<<endl;}
    ~point3d(){cout<<"point3d dtor"<<endl;}
};
int main()
{   
     point *ptr = new point3d[3];
     //delete [] ptr; 榪欐牱鍐欐槸涓嶈鐨?/font>

     //瑕佽繖鏍峰啓
     for(int i=0;i<3;i++){
         point3d * p=&((point3d*)ptr)[i]; //鎭㈠鎴恜oint3d鏁扮粍鎸囬拡
         delete p;
     }
}

Placement Operator New

鏈変竴涓噸杞借繃鐨刵ew 榪愮畻絎?闇瑕佷袱涓弬鏁幫紝綾誨瀷涓簐oid*

Point2w *ptw = new(area) Point2w;

鍏朵腑area鎸囧悜鍐呭瓨涓涓尯鍧楋紝鐢ㄦ潵鏀劇疆浜х敓鍑烘潵鐨凱oint2w object.榪欎釜棰勫厛瀹氫箟濂界殑placement operator new 瀹炵幇鏂規硶錛?灝嗚幏寰楃殑鎸囬拡arena 鎵鎸囩殑鍦板潃浼犲洖鍗沖彲

void* operator new (size_t,void* p) {return p;}

浜嬪疄涓婏紝浠栨墽琛岀殑鍙︿竴鍗婂伐浣滄槸錛氭妸point2w 鐨刢tor 瀹炴柦浜?arena鎵鎸囩殑鍦板潃涓?/font>

Point2w *ptw = (Point2w *)arena; if(ptw!=0)ptw->Point2w::Point2w();

-------

p2w->~Point2w;

p2w = new(arena)Point2w;

濡傛灉鎴戜滑鐢?/font>

delete p2w; p2w = new(arena) Point2w;

delete浼氶噴鏀緋2w鎸囧悜鐨勫唴瀛?鐢變簬涓嬩竴鎸囦護榪樿鐢ㄥ埌p2w錛屾垜浠簲璇ヨ皟鐢╠tor騫朵繚鐣欏瓨鍌ㄧ┖闂?浠ヤ究鍐嶆浣跨敤.

榪樻湁涓浜涘叧浜巔lacement opeator new 鐨勮璁¢棶棰樎仿鋒病鐪嬫槑鐧?涓嶈浜喡仿?/font>

6.3涓存椂瀵硅薄 錛?/font>

c++瀵逛復鏃跺璞″茍鏃犵‖鎬ц瀹氾紝鐢辯紪璇戝櫒鎶夋嫨銆?/font>

瀹為檯涓?T c = a+ b; T operator + (const T& ,const T&);

a+b鍙互鐩存帴鏋勫緩浜巆涓?/font>

閭d箞鏍規湰涓嶄駭鐢熶復鏃跺璞?/font>

浣嗘槸錛屾剰涔夌浉褰撶殑 c=a+b;涓嶈兘蹇界暐涓存椂瀵硅薄":

T temp; temp=operator+(a,b);c.operator =(tmp);tmp.T::~T();

娉ㄦ剰c=a+b;涓紝鐩存帴浼犻抍榪涘叆operator 涓紝涔熷氨鏄笉瑕乼mp鐨勮瘽錛氱敱浜巓perator鍑芥暟涓嶄負鍏跺鍔犲弬鏁拌皟鐢╠tor(鏈熸湜涓涓柊椴滅殑鍐呭瓨)錛屾墍浠ュ繀欏誨湪鍏惰皟鐢ㄥ墠璋冪敤dtor.鐒惰岃漿鎹㈡搷浣滀細鍙樻垚c.T::~T();c.T::T(a+b);copy ctor dtor  copy assignment operator 閮藉彲浠ヨ嚜瀹氫箟錛屾墍浠ユ垜浠敤 鏋愭瀯鍜屾嫹璐濇瀯閫犱唬鏇胯祴鍊間竴鑸岃█鏄笉瀹夊叏鐨勶紝鎵浠ラ渶瑕佷復鏃跺璞¤皟鐢╫perator=

鎵浠?T c=a+b;姣?c=a+b;鏇存湁鏁堢巼

涓存椂瀵硅薄鐢熷懡鍛ㄦ湡錛?/font>

涓存椂瀵硅薄琚懅姣侊紝搴旇鏄瀹屾暣琛ㄨ揪寮忔眰鑱岃繃紼嬬殑鏈鍚庝竴涓楠わ紝璇ュ畬鏁磋〃杈懼紡閫犳垚涓存椂瀵硅薄鐨勪駭鐢?/font>

濡傛灉涓涓復鏃跺璞$粦瀹氬湪涓涓猺eference涓婏紝瀵硅薄灝嗘畫鐣欙紝鐭ラ亾琚垵濮嬪寲涔媟eference鐢熷懡緇撴潫錛屾垨鑰呯煡閬撲復鏃跺璞$殑澹版槑鑼冪暣緇撴潫銆?/font>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



rikisand 2010-03-19 16:55 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久综合狠狠综合久久综青草| 免费在线观看日韩欧美| 亚洲免费影院| 欧美在线播放| 亚洲国产精品一区二区久| 欧美成人精精品一区二区频| 亚洲日本成人| 欧美精品黄色| 亚洲少妇在线| 欧美激情精品久久久久久久变态| 一区二区三区毛片| 国产日本欧美在线观看| 欧美电影免费| 国产精品mm| 老司机一区二区三区| 欧美激情一区二区三区在线视频观看 | 国产综合视频| 欧美视频观看一区| 免播放器亚洲一区| 欧美在线91| 欧美激情亚洲视频| 日韩午夜电影| 欧美成人精品1314www| 亚洲女ⅴideoshd黑人| 亚洲日本精品国产第一区| 国产精品中文在线| 国产精品日日摸夜夜摸av| 欧美日韩激情网| 欧美成人一品| 国产日韩一区| 国产日韩欧美另类| 99这里有精品| 99视频精品在线| 久久久久高清| 蜜臀久久99精品久久久久久9| 亚洲久久一区| 亚洲精品国产日韩| 欧美一级大片在线观看| 亚洲一区欧美一区| 亚洲特色特黄| 亚洲午夜视频在线观看| 免费看黄裸体一级大秀欧美| 老司机精品久久| 国产片一区二区| 亚洲欧美一区二区原创| 欧美在线地址| 在线亚洲精品福利网址导航| 免费在线国产精品| 黄色亚洲免费| 欧美日韩亚洲高清| 国产精品久久久久久久久免费 | 亚洲第一精品夜夜躁人人爽| 亚洲第一福利社区| 久久午夜精品| 亚洲激情网址| av不卡免费看| 亚洲在线日韩| 国产精品v日韩精品v欧美精品网站| 亚洲精品国产欧美| 亚洲国产天堂久久综合网| 亚洲精品一品区二品区三品区| 久久综合免费视频影院| 欲色影视综合吧| 亚洲精品视频免费观看| 亚洲第一中文字幕在线观看| 亚洲日本久久| 欧美理论在线播放| 国产亚洲成av人片在线观看桃| 亚洲一区二区三区中文字幕| 久久精品国产77777蜜臀| 美日韩精品视频免费看| 久久全球大尺度高清视频| 亚洲美女av电影| 99精品国产99久久久久久福利| 夜色激情一区二区| 亚洲精品久久久久久一区二区| 欧美激情一区二区三区在线视频观看| 日韩亚洲欧美精品| 99精品视频免费在线观看| 国产精品美女主播| 久久亚洲综合网| 欧美日本在线视频| 欧美一级午夜免费电影| 欧美激情欧美狂野欧美精品| 欧美大片一区二区| 亚洲一区精品视频| 亚洲日本中文字幕| 国产精品久久久免费| 久久蜜臀精品av| 亚洲性夜色噜噜噜7777| 国产在线观看一区| 亚洲国产精品欧美一二99| 国产精品久久久久久久久久ktv | 亚洲尤物视频在线| 在线精品视频免费观看| 99视频有精品| 影音先锋中文字幕一区二区| 亚洲乱码久久| 有码中文亚洲精品| 亚洲午夜成aⅴ人片| 亚洲国产精品成人va在线观看| 一区二区久久久久久| 欧美激情中文不卡| 久久福利一区| 亚洲男人av电影| 在线视频国产日韩| 亚洲女人天堂av| 亚洲精品影院| 久久视频这里只有精品| 欧美一级电影久久| 欧美视频专区一二在线观看| 欧美成人第一页| 国产亚洲毛片在线| 老司机久久99久久精品播放免费 | 狂野欧美性猛交xxxx巴西| 欧美日本视频在线| 亚洲第一天堂av| 在线观看欧美视频| 欧美一区三区二区在线观看| 亚洲欧美日韩第一区| 欧美人成在线视频| 亚洲国产三级| 亚洲区国产区| 艳妇臀荡乳欲伦亚洲一区| 最新国产拍偷乱拍精品 | 一区二区三区视频在线| 亚洲精选在线| 亚洲欧美在线x视频| 这里只有视频精品| 亚洲人成绝费网站色www| 久久精品国产精品亚洲精品| 国产日韩综合| 亚洲一区二区在线播放| 亚洲自啪免费| 国产精品久久久久久久久免费| 亚洲免费观看高清完整版在线观看| 亚洲黄色免费网站| 在线视频日韩精品| 亚洲网站在线观看| 欧美婷婷久久| 亚洲视频一二| 久久成人免费| 一区免费观看视频| 蘑菇福利视频一区播放| 亚洲国产精品一区在线观看不卡| 亚洲国产日韩欧美在线动漫| 欧美成人一区二免费视频软件| 亚洲国产成人av| 一区二区三区四区蜜桃| 国产精品久久久久久久久久久久久| 亚洲特级毛片| 久热综合在线亚洲精品| 亚洲靠逼com| 国产精品男女猛烈高潮激情| 亚洲欧美中文日韩在线| 久久躁日日躁aaaaxxxx| 亚洲人成在线观看一区二区| 欧美日韩第一区| 亚洲欧美国产日韩天堂区| 久久久五月婷婷| 日韩一级欧洲| 国产农村妇女毛片精品久久麻豆| 欧美一区二区精品| 亚洲国产女人aaa毛片在线| 亚洲调教视频在线观看| 久久男人资源视频| 亚洲片国产一区一级在线观看| 亚洲一区二区三区中文字幕在线| 国产婷婷成人久久av免费高清| 另类欧美日韩国产在线| 一个色综合导航| 欧美成人综合一区| 精品69视频一区二区三区| 欧美夫妇交换俱乐部在线观看| 欧美在线影院| 亚洲三级视频| 国产麻豆一精品一av一免费| 卡一卡二国产精品| 亚洲一级网站| 亚洲第一色中文字幕| 欧美一区二区高清在线观看| 亚洲三级网站| 激情综合久久| 国产免费成人| 欧美色图麻豆| 欧美成人免费在线视频| 午夜一区二区三区在线观看| 香蕉乱码成人久久天堂爱免费 | 国产精品综合色区在线观看| 美女久久一区| 久久大逼视频| 午夜精品视频在线观看一区二区| 欧美激情综合色| 久久久综合视频| 欧美一区二区三区四区夜夜大片| 一本色道精品久久一区二区三区| 在线欧美影院| 亚洲另类视频| 日韩午夜免费| 欧美中文字幕在线视频|