锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
鍚勪釜鍙傛暟浠h〃鐨勬剰涔夛紝鍙互鍙傝僊sdn銆傛瘮濡?nologo琛ㄧず緙栬瘧鏃朵笉鍦ㄨ緭鍑虹獥鍙f樉紺鴻繖浜涜緗紙鎴戜滑鍙互鎶婅繖涓弬鏁板幓鎺夋潵鐪嬬湅鏁堟灉錛夌瓑絳夈備竴鑸垜浠笉浼氱洿鎺ヤ慨鏀硅繖浜涜緗紝鑰屾槸閫氳繃榪欎竴欏墊渶涓婇潰鐨凜ategory涓殑鍚勯」鏉ュ畬鎴?.....
錛嶈漿杞斤紞
涓昏閫氳繃VC鐨勮彍鍗曢」Project->Settings->C/C++欏墊潵瀹屾垚銆傛垜浠彲浠ョ湅鍒拌繖涓欏電殑鏈涓嬮潰Project Options涓殑鍐呭錛屼竴鑸涓嬶細
/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
鍚勪釜鍙傛暟浠h〃鐨勬剰涔夛紝鍙互鍙傝僊sdn銆傛瘮濡?nologo琛ㄧず緙栬瘧鏃朵笉鍦ㄨ緭鍑虹獥鍙f樉紺鴻繖浜涜緗紙鎴戜滑鍙互鎶婅繖涓弬鏁板幓鎺夋潵鐪嬬湅鏁堟灉錛夌瓑絳夈備竴鑸垜浠笉浼氱洿鎺ヤ慨鏀硅繖浜涜緗紝鑰屾槸閫氳繃榪欎竴欏墊渶涓婇潰鐨凜ategory涓殑鍚勯」鏉ュ畬鎴愩?/font>
1) General錛氫竴浜涙諱綋璁劇疆銆?/font>
Warning level銆鐢ㄦ潵鎺у埗璀﹀憡淇℃伅錛屽叾涓璍evel 1鏄渶涓ラ噸鐨勭駭鍒紱
Warnings as errors銆灝嗚鍛婁俊鎭綋浣滈敊璇鐞嗭紱
Optimizations銆浠g爜浼樺寲錛屽彲浠ュ湪Category鐨凮ptimizations欏逛腑榪涜鏇寸粏鐨勮緗紱
Generate browse info銆鐢ㄤ互鐢熸垚.sbr鏂囦歡錛岃褰曠被銆佸彉閲忕瓑絎﹀彿淇℃伅錛屽彲浠ュ湪Category鐨凩isting Files欏逛腑榪涜鏇村鐨勮緗?
Debug info銆鐢熸垚璋冭瘯淇℃伅錛?
None錛屼笉浜х敓浠諱綍璋冭瘯淇℃伅錛堢紪璇戞瘮杈冨揩錛夛紱
Line Numbers Only錛屼粎鐢熸垚鍏ㄥ眬鐨勫拰澶栭儴絎﹀彿鐨勮皟璇曚俊鎭埌.OBJ鏂囦歡鎴?EXE鏂囦歡錛屽噺灝忕洰鏍囨枃浠剁殑灝哄錛?
C 7.0- Compatible錛岃褰曡皟璇曞櫒鐢ㄥ埌鐨勬墍鏈夌鍙蜂俊鎭埌.OBJ鏂囦歡鍜?EXE鏂囦歡錛?
Program Database錛屽垱寤?PDB鏂囦歡璁板綍鎵鏈夎皟璇曚俊鎭紱
Program Database for "Edit & Continue"錛屽垱寤?PDB鏂囦歡璁板綍鎵鏈夎皟璇曚俊鎭紝騫朵笖鏀寔璋冭瘯鏃剁紪杈戙?
2) C++ Language
Pointer-to-member representation銆鐢ㄦ潵璁劇疆綾誨畾涔?寮曠敤鐨勫厛鍚庡叧緋伙細
Best-Case Always錛岃〃紺哄湪寮曠敤綾諱箣鍓嶈綾昏偗瀹氬凡緇忓畾涔夛紱
General-Purpose Always錛岋紵
Point to Any Class
Point to Single- and Multiple-Inheritance Classes
Point to Single-Inheritance Classes
Enable Exception Handling錛岃繘琛屽悓姝ョ殑寮傚父澶勭悊錛?
Enable Run-Time Type Information銆榪嬌緙栬瘧鍣ㄥ鍔犱唬鐮佸湪榪愯鏃惰繘琛屽璞$被鍨嬫鏌ワ紱
Disable Construction Displacements銆璁劇疆綾繪瀯閫?鏋愭瀯鍑芥暟璋冪敤铏氬嚱鏁伴棶棰樸?
3) Code Generation
Processor銆琛ㄧず浠g爜鎸囦護浼樺寲錛屽彲浠ヤ負80386銆?0486銆丳entium銆丳entium Pro錛屾垨鑰匓lend琛ㄧず娣峰悎浠ヤ笂鍚勭浼樺寲銆?
Use run-time library銆鐢ㄤ互鎸囧畾紼嬪簭榪愯鏃朵嬌鐢ㄧ殑榪愯鏃跺簱錛屾湁涓涓師鍒欏氨鏄紝涓涓繘紼嬩笉瑕佸悓鏃朵嬌鐢ㄥ嚑涓増鏈殑榪愯鏃跺簱銆傝繛鎺ヤ簡鍗曠嚎紼嬪簱灝變笉鏀寔澶氱嚎紼嬭皟鐢紝榪炴帴浜嗗綰跨▼搴撳氨瑕佹眰鍒涘緩澶氱嚎紼嬬殑搴旂敤紼嬪簭銆?
Single-Threaded錛屽崟綰跨▼Release鐗堟湰錛岄潤鎬佽繛鎺IBC.LIB搴擄紱
Debug Single-Threaded錛屽崟綰跨▼Debug鐗堟湰錛岄潤鎬佽繛鎺IBCD.LIB搴擄紱
Multithreaded錛屽綰跨▼Release鐗堟湰錛岄潤鎬佽繛鎺IBCMT.LIB搴擄紱
Debug Multithreaded錛屽綰跨▼Debug鐗堟湰錛岄潤鎬佽繛鎺IBCMTD.LIB搴擄紱
Multithreaded DLL錛屽姩鎬佽繛鎺SVCRT.DLL搴擄紱
Debug Multithreaded DLL錛屽姩鎬佽繛鎺SVCRTD.DLL搴撱?
Calling convention銆鍙互鐢ㄦ潵璁懼畾璋冪敤綰﹀畾錛屾湁涓夌錛歘_cdecl銆乢_fastcall鍜宊_stdcall銆?br>銆銆鍚勭璋冪敤綰﹀畾鐨勪富瑕佸尯鍒湪浜庯細1. 鍑芥暟璋冪敤鏃訛紝鍑芥暟鐨勫弬鏁版槸浠庡乏鍒板彸鍘嬪叆鍫嗘爤榪樻槸浠庡彸鍒板乏鍘嬪叆鍫嗘爤錛?. 鍦ㄥ嚱鏁拌繑鍥炴椂錛岀敱鍑芥暟鐨勮皟鐢ㄨ呮潵娓呯悊鍘嬪叆鍫嗘爤鐨勫弬鏁拌繕鏄敱鍑芥暟鏈韓鏉ユ竻鐞嗭紱3. 浠ュ強鍦ㄧ紪璇戞椂瀵瑰嚱鏁板悕榪涜鐨勫懡鍚嶄慨楗幫紙鍙互閫氳繃Listing Files鐪嬪埌鍚勭鍛藉悕淇グ鏂瑰紡錛夈?
Struct member alignment銆鐢ㄤ互鎸囧畾鏁版嵁緇撴瀯涓殑鎴愬憳鍙橀噺鍦ㄥ唴瀛樹腑鏄寜鍑犲瓧鑺傚榻愮殑錛屾牴鎹綆楁満鏁版嵁鎬葷嚎鐨勪綅鏁幫紝涓嶅悓鐨勫榻愭柟寮忓瓨鍙栨暟鎹殑閫熷害涓嶄竴鏍楓傝繖涓弬鏁板鏁版嵁鍖呯綉緇滀紶杈撶瓑搴旂敤灝や負閲嶈錛屼笉鏄瓨鍙栭熷害闂錛岃屾槸鏁版嵁浣嶇殑綺劇‘瀹氫箟闂錛屼竴鑸湪紼嬪簭涓嬌鐢?pragma pack鏉ユ寚瀹氥?
4) Customize
Disable Language Extensions錛岃〃紺轟笉浣跨敤寰蔣涓烘爣鍑咰鍋氱殑璇█鎵╁睍錛?
Eliminate Duplicate Strings錛屼富瑕佺敤浜庡瓧絎︿覆浼樺寲錛堝皢瀛楃涓叉斁鍒扮紦鍏呮睜閲屼互鑺傜渷絀洪棿錛夛紝浣跨敤榪欎釜鍙傛暟錛屼嬌寰?br> char *sBuffer = "This is a character buffer";
char *tBuffer = "This is a character buffer";
sBuffer 鍜宼Buffer鎸囧悜鐨勬槸鍚屼竴鍧楀唴瀛樼┖闂達紱
Enable Function-Level Linking 錛屽憡璇夌紪璇戝櫒灝嗗悇涓嚱鏁版寜鎵撳寘鏍煎紡緙栬瘧錛?
Enables minimal rebuild錛岄氳繃淇濆瓨鍏寵仈淇℃伅鍒?IDB鏂囦歡錛屼嬌緙栬瘧鍣ㄥ彧瀵規渶鏂扮被瀹氫箟鏀瑰姩榪囩殑婧愭枃浠惰繘琛岄噸緙栬瘧錛屾彁楂樼紪璇戦熷害錛?
Enable Incremental Compilation錛屽悓鏍烽氳繃.IDB鏂囦歡淇濆瓨鐨勪俊鎭紝鍙噸緙栬瘧鏈鏂版敼鍔ㄨ繃鐨勫嚱鏁幫紱
Suppress Startup Banner and Information Messages錛岀敤浠ユ帶鍒跺弬鏁版槸鍚﹀湪output紿楀彛杈撳嚭銆?/font>
5) Listing Files
Generate browse info 涓婇潰宸茬粡鎻愬埌榪囥傝繖閲屽彲浠ヨ繘琛屾洿澶氱殑璁劇疆銆?
Exclude Local Variables from Browse Info銆琛ㄧず鏄惁灝嗗眬閮ㄥ彉閲忕殑淇℃伅鏀懼埌.SBR鏂囦歡涓?
Listing file type銆鍙互璁劇疆鐢熸垚鐨勫垪琛ㄤ俊鎭枃浠剁殑鍐呭錛?
Assembly-Only Listing銆浠呯敓鎴愭眹緙栦唬鐮佹枃浠訛紙.ASM鎵╁睍鍚嶏級錛?
Assembly With Machine Code銆鐢熸垚鏈哄櫒浠g爜鍜屾眹緙栦唬鐮佹枃浠訛紙.COD鎵╁睍鍚嶏級錛?
Assembly With Source Code銆鐢熸垚婧愪唬鐮佸拰姹囩紪浠g爜鏂囦歡錛?ASM鎵╁睍鍚嶏級錛?
Assembly, Machine Code, and Source銆鐢熸垚鏈哄櫒鐮併佹簮浠g爜鍜屾眹緙栦唬鐮佹枃浠訛紙.COD鎵╁睍鍚嶏級銆?
Listing file name銆鐢熸垚鐨勪俊鎭枃浠剁殑璺緞錛屼竴鑸負Debug鎴朢elease鐩綍涓嬶紝鐢熸垚鐨勬枃浠跺悕鑷姩鍙栨簮鏂囦歡鐨勬枃浠跺悕銆?
6) Optimizations銆浠g爜浼樺寲璁劇疆銆?/font>
Maximize Speed銆鐢熸垚鏈蹇熺殑浠g爜錛?
Minimize Size銆鐢熸垚鏈灝忓昂瀵哥殑紼嬪簭錛?
Customize銆瀹氬埗浼樺寲銆傚畾鍒剁殑鍐呭鍖呮嫭錛?
Assume No Aliasing錛屼笉浣跨敤鍒悕錛堟彁楂橀熷害錛夛紱
Assume Aliasing Across Function Calls錛屼粎鍑芥暟鍐呴儴涓嶄嬌鐢ㄥ埆鍚嶏紱
Global Optimizations錛屽叏灞浼樺寲錛屾瘮濡傜粡甯哥敤鍒扮殑鍙橀噺浣跨敤瀵勫瓨鍣ㄤ繚瀛橈紝鎴栬呭驚鐜唴鐨勮綆椾紭鍖栵紝濡俰 = -100;while( i < 0 ){顐緄 += x + y;}浼氳浼樺寲涓篿 = -100;t = x + y;while( i < 0 ){i += t;}錛?
Generate Intrinsic Functions錛屼嬌鐢ㄥ唴閮ㄥ嚱鏁版浛鎹竴浜涘嚱鏁拌皟鐢紙鎻愰珮閫熷害錛夛紱
Improve Float Consistency錛屾誕鐐硅繍綆楁柟闈㈢殑浼樺寲錛?
Favor Small Code錛岀▼搴忥紙exe鎴杁ll錛夊昂瀵鎬紭鍖栦紭鍏堜簬浠g爜閫熷害浼樺寲錛?
Favor Fast Code錛岀▼搴忥紙exe鎴杁ll錛変唬鐮侀熷害浼樺寲浼樺厛浜庡昂瀵鎬紭鍖栵紱
Frame-Pointer Omission錛屼笉浣跨敤甯ф寚閽堬紝浠ユ彁楂樺嚱鏁拌皟鐢ㄩ熷害錛?
Full Optimization錛岀粍鍚堜簡鍑犵鍙傛暟錛屼互鐢熸垚鏈蹇殑紼嬪簭浠g爜銆?
Inline function expansion錛屽唴鑱斿嚱鏁版墿灞曠殑涓夌浼樺寲錛堜嬌鐢ㄥ唴鑱斿彲浠ヨ妭鐪佸嚱鏁拌皟鐢ㄧ殑寮閿錛屽姞蹇▼搴忛熷害錛夛細
Disable錛屼笉浣跨敤鍐呰仈錛?
Only __inline錛屼粎鍑芥暟瀹氫箟鍓嶆湁inline鎴朹_inline鏍囪浣跨敤鍐呰仈錛?
Any Suitable錛岄櫎浜唅nline鎴朹_inline鏍囪鐨勫嚱鏁板錛岀紪璇戝櫒"瑙夊緱"搴旇浣跨敤鍐呰仈鐨勫嚱鏁幫紝閮戒嬌鐢ㄥ唴鑱斻?
7) Precompiled Headers銆棰勭紪璇戝ご鏂囦歡鐨勮緗備嬌鐢ㄩ緙栬瘧鍙互鎻愰珮閲嶅緙栬瘧鐨勯熷害銆俈C涓鑸皢涓浜涘叕鍏辯殑銆佷笉澶у彉鍔ㄧ殑澶存枃浠訛紙姣斿afxwin.h絳夛級闆嗕腑鏀懼埌stdafx.h涓紝榪欎竴閮ㄥ垎浠g爜灝變笉蹇呮瘡嬈¢兘閲嶆柊緙栬瘧錛堥櫎闈炴槸Rebuild All錛夈?/font>
8) Preprocessor銆棰勭紪璇戝鐞嗐傚彲浠ュ畾涔?瑙i櫎瀹氫箟涓浜涘父閲忋?/font>
Additional include directories錛屽彲浠ユ寚瀹氶澶栫殑鍖呭惈鐩綍錛屼竴鑸槸鐩稿浜庢湰欏圭洰鐨勭洰褰曪紝濡?.\Include銆?/font>
--------------------------------------------------------------------------------
榪炴帴鍙傛暟鐨勮緗?br>涓昏閫氳繃VC鐨勮彍鍗曢」Project->Settings->Link欏墊潵瀹屾垚銆傛垜浠彲浠ョ湅鍒拌繖涓欏電殑鏈涓嬮潰Project Options涓殑鍐呭錛屼竴鑸涓嬶細
/nologo /subsystem:windows /incremental:yes /pdb:"Debug/WritingDlgTest.pdb" /debug /machine:I386 /out:"Debug/WritingDlgTest.exe" /pdbtype:sept
涓嬮潰鎴戜滑鍒嗗埆鏉ョ湅涓涓婥ategory涓殑鍚勯」璁劇疆銆?/font>
1) General銆涓浜涙諱綋璁劇疆銆傚彲浠ヨ緗敓鎴愮殑鏂囦歡璺緞銆佹枃浠跺悕錛涜繛鎺ョ殑搴撴枃浠訛紱
Generate debug info錛岀敓鎴怐ebug淇℃伅鍒?PDB鏂囦歡錛堝叿浣撴牸寮忓彲浠ュ湪Category->Debug涓緗級錛?
Ignore All Default Libraries錛屾斁寮冩墍鏈夐粯璁ょ殑搴撹繛鎺ワ紱
Link Incrementally錛岄氳繃鐢熸垚. ILK鏂囦歡瀹炵幇閫掑寮忚繛鎺ヤ互鎻愰珮鍚庣畫榪炴帴閫熷害錛屼絾涓鑸繖縐嶆柟寮忎笅鐢熸垚鐨勬枃浠訛紙EXE鎴朌LL錛夎緝澶э紱
Generate Mapfile錛岀敓鎴?MAP鏂囦歡璁板綍妯″潡鐩稿叧淇℃伅錛?
Enable Profiling錛岃繖涓弬鏁伴氬父涓嶨enerate Mapfile鍙傛暟鍚屾椂浣跨敤錛岃屼笖濡傛灉浜х敓Debug淇℃伅鐨勮瘽錛屼笉鑳界敤.PDB鏂囦歡錛岃屼笖蹇呴』鐢∕icrosoft Format銆?
2) Customize銆榪欓噷鍙互榪涜浣跨敤紼嬪簭鏁版嵁搴撴枃浠剁殑璁劇疆銆?/font>
Force File Output錛屽己鍒朵駭鐢熻緭鍑烘枃浠訛紙EXE鎴朌LL錛夛紱
Print Progress Messages錛屽彲浠ュ皢榪炴帴榪囩▼涓殑榪涘害淇℃伅杈撳嚭鍒癘utput紿楀彛銆?
3) Debug銆璁劇疆鏄惁鐢熸垚璋冭瘯淇℃伅錛屼互鍙婅皟璇曚俊鎭殑鏍煎紡銆?/font>
Dubug info錛屾牸寮忓彲浠ユ湁Microsoft Format銆丆OFF Format錛圕ommon Object File Format錛夊拰Both Formats涓夌閫夋嫨錛?
Separate Types錛岃〃紺哄皢Debug鏍煎紡淇℃伅浠ョ嫭绔嬬殑.PDB鏂囦歡瀛樻斁錛岃繕鏄洿鎺ユ斁鍦ㄥ悇涓簮鏂囦歡鐨?PDB鏂囦歡涓傞変腑鐨勮瘽錛岃〃紺洪噰鐢ㄥ悗鑰呯殑鏂瑰紡錛岃繖縐嶆柟寮忚皟璇曞惎鍔ㄦ瘮杈冨揩銆?/font>
4) Input銆榪欓噷鍙互鎸囧畾瑕佽繛鎺ョ殑搴撴枃浠訛紝鏀懼純榪炴帴鐨勫簱鏂囦歡銆傝繕鍙互澧炲姞棰濆鐨勫簱鏂囦歡鐩綍錛屼竴鑸槸鐩稿浜庢湰欏圭洰鐨勭洰褰曪紝濡?.\Lib銆?/font>
Force Symbol References錛屽彲浠ユ寚瀹氳繛鎺ョ壒瀹氱鍙峰畾涔夌殑搴撱?
5) Output銆
Base Address銆鍙互鏀瑰彉紼嬪簭榛樿鐨勫熀鍦板潃錛圗XE鏂囦歡榛樿涓?x400000錛孌LL榛樿涓?x10000000錛夛紝鎿嶄綔緋葷粺瑁呰澆涓涓▼搴忔椂鎬繪槸璇曠潃鍏堜粠榪欎釜鍩哄湴鍧寮濮嬨?
Entry-Point Symbol銆鍙互鎸囧畾紼嬪簭鐨勫叆鍙e湴鍧錛屼竴鑸負涓涓嚱鏁板悕錛堜笖蹇呴』閲囩敤__stdcall璋冪敤綰﹀畾錛夈備竴鑸琖in32鐨勭▼搴忥紝EXE鐨勫叆鍙d負 WinMain錛孌LL鐨勫叆鍙d負DllEntryPoint錛涙渶濂借榪炴帴鍣ㄨ嚜鍔ㄨ緗▼搴忕殑鍏ュ彛鐐廣傞粯璁ゆ儏鍐典笅錛岄氳繃涓涓狢鐨勮繍琛屾椂搴撳嚱鏁版潵瀹炵幇錛氭帶鍒跺彴紼嬪簭閲囩敤mainCRTStartup (鎴杦mainCRTStartup)鍘昏皟鐢ㄧ▼搴忕殑main (鎴杦main)鍑芥暟錛沇indows紼嬪簭閲囩敤WinMainCRTStartup (鎴?wWinMainCRTStartup)璋冪敤紼嬪簭鐨刉inMain (鎴?wWinMain錛屽繀欏婚噰鐢╛_stdcall璋冪敤綰﹀畾)錛汥LL閲囩敤_DllMainCRTStartup璋冪敤DllMain鍑芥暟錛堝繀欏婚噰鐢?__stdcall璋冪敤綰﹀畾錛夈?
Stack allocations銆鐢ㄤ互璁劇疆紼嬪簭浣跨敤鐨勫爢鏍堝ぇ灝忥紙璇蜂嬌鐢ㄥ崄榪涘埗錛夛紝榛樿涓?鍏嗗瓧鑺傘?
Version Information銆鍛婅瘔榪炴帴鍣ㄥ湪EXE鎴朌LL鏂囦歡鐨勫紑濮嬮儴鍒嗘斁涓婄増鏈彿銆?
鍊煎緱娉ㄦ剰鐨勬槸錛?/font>
涓婇潰鍚勪釜鍙傛暟鏄ぇ灝忓啓鏁忔劅鐨勶紱
鍦ㄥ弬鏁板悗鍔犱笂"-"琛ㄧず璇ュ弬鏁版棤鏁堬紱
鍚勪釜鍙傛暟鍊奸夐」鏈?*"鐨勮〃紺轟負璇ュ弬鏁扮殑榛樿鍊鹼紱
鍙互浣跨敤欏靛彸涓婅鐨?Reset"鎸夐挳鏉ユ仮澶嶈欏電殑鎵鏈夐粯璁よ緗?
--------------------------------------------------------------------------------
鍏跺畠涓浜涘弬鏁拌緗?/font>
1) Project->Settings->General錛屽彲浠ヨ緗繛鎺FC搴撶殑鏂瑰紡錛堥潤鎬佹垨鍔ㄦ侊級銆傚鏋滄槸鍔ㄦ佽繛鎺ワ紝鍦∕FC杞歡鍙戝竷鏃朵笉瑕佸繕浜嗗甫涓奙FC鐨凞LL銆?/font>
2) Project->Settings->Debug錛屽彲浠ヨ緗皟璇曟椂榪愯鐨勫彲鎵ц鏂囦歡錛屼互鍙婂懡浠よ鍙傛暟絳夈?/font>
3) Project->Settings->Custom Build錛屽彲浠ヨ緗紪璇?榪炴帴鎴愬姛鍚庤嚜鍔ㄦ墽琛屼竴浜涙搷浣溿傛瘮杈冩湁鐢ㄧ殑鏄紝鍐機OM鏃跺笇鏈沄C瀵圭紪璇戦氳繃鐨凜OM鏂囦歡鑷姩娉ㄥ唽錛屽彲浠ュ涓嬭緗細
Description: Register COM
Commands: regsvr32 /s /c $(TargetPath)
echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg
Outputs: $(TargetDir)\$(TargetName).trg
4) Tools->Options->Directories錛岃緗郴緇熺殑Include銆丩ibrary璺緞銆?/font>
--------------------------------------------------------------------------------
灝忕獚闂? 欏圭洰涓殑.ncb銆?opt銆?aps銆?clw鏂囦歡浠ュ強Debug銆丷elease鐩綍涓嬬殑鎵鏈夋枃浠墮兘鍙互鍒犳帀鐨勩?/font>
DWORD dwStart = GetTickCount(); DWORD dwEnd = dwStart; do { dwEnd = GetTickCount()-dwStart; }while(dwEnd <50);涓轟嬌GetTickCount()鍑芥暟鍦ㄥ歡鏃舵垨瀹氭椂鏈熼棿鑳藉鐞嗗叾浠栫殑娑堟伅錛屽彲浠ユ妸浠g爜鏀逛負錛?br>
DWORD dwStart = GetTickCount(); DWORD dwEnd = dwStart; do { MSG msg; GetMessage(&msg,NULL,0,0); TranslateMessage(&msg); DispatchMessage(&msg); dwEnd = GetTickCount()-dwStart; }while(dwEnd <50);铏界劧榪欐牱鍙互闄嶄綆CPU鐨勫崰鏈夌巼錛屽茍鍦ㄥ歡鏃舵垨瀹氭椂鏈熼棿涔熻兘澶勭悊鍏朵粬鐨勬秷鎭紝浣嗛檷浣庝簡寤舵椂鎴栧畾鏃剁簿搴︺?br>銆銆鏂瑰紡浜旓細涓嶨etTickCount()鍑芥暟綾諱技鐨勫濯掍綋瀹氭椂鍣ㄥ嚱鏁癉WORD timeGetTime(void)錛岃鍑芥暟瀹氭椂綺?wbr> 搴︿負ms綰э紝榪斿洖浠嶹indows鍚姩寮濮嬬粡榪囩殑姣鏁般傚井杞叕鍙稿湪鍏跺濯掍綋Windows涓彁渚涗簡綺劇‘瀹氭椂鍣ㄧ殑搴?wbr> 灞侫PI鎸侊紝鍒╃敤澶氬獟浣撳畾鏃跺櫒鍙互寰堢簿紜湴璇誨嚭緋葷粺鐨勫綋鍓嶆椂闂達紝騫朵笖鑳藉湪闈炲父綺劇‘鐨勬椂闂撮棿闅斿唴瀹屾垚涓
MMRESULT timeSetEvent錛?UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent 錛?/pre> 銆銆璇ュ嚱鏁拌緗竴涓畾鏃跺洖璋冧簨浠訛紝姝や簨浠跺彲浠ユ槸涓涓竴嬈℃т簨浠舵垨鍛ㄦ湡鎬т簨浠躲備簨浠朵竴鏃﹁嬋媧伙紝渚胯皟鐢ㄦ寚瀹氱殑鍥炶皟鍑芥暟錛?wbr> 鎴愬姛鍚庤繑鍥炰簨浠剁殑鏍囪瘑絎︿唬鐮侊紝鍚﹀垯榪斿洖NULL銆傚嚱鏁扮殑鍙傛暟璇存槑濡備笅錛?br>uDelay錛氫互姣鎸囧畾浜嬩歡鐨勫懆鏈熴? Uresolution錛氫互姣鎸囧畾寤舵椂鐨勭簿搴︼紝鏁板艱秺灝忓畾鏃跺櫒浜嬩歡鍒嗚鯨鐜囪秺楂樸傜己鐪佸間負1ms銆? LpTimeProc錛氭寚鍚戜竴涓洖璋冨嚱鏁般? DwUser錛氬瓨鏀劇敤鎴鋒彁渚涚殑鍥炶皟鏁版嵁銆? FuEvent錛氭寚瀹氬畾鏃跺櫒浜嬩歡綾誨瀷錛? TIME_ONESHOT錛歶Delay姣鍚庡彧浜х敓涓嬈′簨浠? TIME_PERIODIC 錛氭瘡闅攗Delay姣鍛ㄦ湡鎬у湴浜х敓浜嬩歡銆?銆銆鍏蜂綋搴旂敤鏃訛紝鍙互閫氳繃璋冪敤timeSetEvent()鍑芥暟錛屽皢闇瑕佸懆鏈熸ф墽琛岀殑浠誨姟瀹氫箟鍦↙pTimeProc鍥炶皟鍑芥暟涓?濡傦細瀹氭椂閲囨牱銆佹帶鍒剁瓑)錛屼粠鑰屽畬鎴愭墍闇澶勭悊鐨勪簨浠躲傞渶瑕佹敞鎰忕殑鏄紝浠誨姟澶勭悊鐨勬椂闂翠笉鑳藉ぇ浜庡懆鏈熼棿闅旀椂闂淬傚彟澶栵紝鍦ㄥ畾鏃跺櫒浣跨敤瀹屾瘯鍚庯紝 搴斿強鏃惰皟鐢╰imeKillEvent()灝嗕箣閲婃斁銆?
銆銆鏂瑰紡涓冿細瀵逛簬綺劇‘搴﹁姹傛洿楂樼殑瀹氭椂鎿嶄綔錛屽垯搴旇浣跨敤QueryPerformanceFrequency()鍜?wbr> QueryPerformanceCounter()鍑芥暟銆傝繖涓や釜鍑芥暟鏄疺C鎻愪緵鐨勪粎渚沇indows 95鍙婂叾鍚庣畫鐗堟湰浣跨敤鐨勭簿紜椂闂村嚱鏁幫紝騫惰姹傝綆楁満浠庣‖浠朵笂鏀寔綺劇‘瀹氭椂鍣ㄣ傚紺轟緥宸ョ▼涓殑Timer7銆乀imer7_1銆乀imer7_2銆乀imer7_3銆?br>QueryPerformanceFrequency()鍑芥暟鍜孮ueryPerformanceCounter()鍑芥暟鐨勫師鍨嬪涓嬶細
BOOL QueryPerformanceFrequency(LARGE_INTEGER 錛妉pFrequency); BOOL QueryPerformanceCounter(LARGE_INTEGER 錛妉pCount);銆銆鏁版嵁綾誨瀷ARGE_INTEGER鏃㈠彲浠ユ槸涓涓?瀛楄妭闀跨殑鏁村瀷鏁幫紝涔熷彲浠ユ槸涓や釜4瀛楄妭闀跨殑鏁村瀷鏁扮殑鑱斿悎緇撴瀯錛?wbr> 鍏跺叿浣撶敤娉曟牴鎹紪璇戝櫒鏄惁鏀寔64浣嶈屽畾銆傝綾誨瀷鐨勫畾涔夊涓嬶細
typedef union _LARGE_INTEGER { struct { DWORD LowPart ;// 4瀛楄妭鏁村瀷鏁? LONG HighPart;// 4瀛楄妭鏁村瀷鏁? }; LONGLONG QuadPart ;// 8瀛楄妭鏁村瀷鏁? }LARGE_INTEGER ;銆銆鍦ㄨ繘琛屽畾鏃朵箣鍓嶏紝鍏堣皟鐢≦ueryPerformanceFrequency()鍑芥暟鑾峰緱鏈哄櫒鍐呴儴瀹氭椂鍣ㄧ殑鏃墮挓棰戠巼錛?wbr> 鐒跺悗鍦ㄩ渶瑕佷弗鏍煎畾鏃剁殑浜嬩歡鍙戠敓涔嬪墠鍜屽彂鐢熶箣鍚庡垎鍒皟鐢≦ueryPerformanceCounter()鍑芥暟錛屽埄鐢ㄤ袱嬈¤幏寰楃殑璁℃暟涔嬪樊鍙婃椂閽熼鐜囷紝璁$畻鍑轟簨浠剁粡鍘嗙殑綺劇‘鏃墮棿銆備笅鍒椾唬鐮佸疄鐜?ms鐨勭簿紜畾鏃訛細
LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 鑾峰緱璁℃暟鍣ㄧ殑鏃墮挓棰戠巼 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 鑾峰緱鍒濆鍊? do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//鑾峰緱涓鍊? dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 鑾峰緱瀵瑰簲鐨勬椂闂村鹼紝鍗曚綅涓虹 }while(dfTim<0.001);銆銆鍏跺畾鏃惰宸笉瓚呰繃1寰錛岀簿搴︿笌CPU絳夋満鍣ㄩ厤緗湁鍏熾?涓嬮潰鐨勭▼搴忕敤鏉ユ祴璇曞嚱鏁癝leep(100)鐨勭簿紜寔緇椂闂達細
LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 鑾峰緱璁℃暟鍣ㄧ殑鏃墮挓棰戠巼 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 鑾峰緱鍒濆鍊? Sleep(100); QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//鑾峰緱涓鍊? dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 鑾峰緱瀵瑰簲鐨勬椂闂村鹼紝鍗曚綅涓虹銆銆鐢變簬Sleep()鍑芥暟鑷韓鐨勮宸紝涓婅堪紼嬪簭姣忔鎵ц鐨勭粨鏋滈兘浼氭湁寰皬璇樊銆備笅鍒椾唬鐮佸疄鐜?寰鐨勭簿紜畾鏃訛細
LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 鑾峰緱璁℃暟鍣ㄧ殑鏃墮挓棰戠巼 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 鑾峰緱鍒濆鍊? do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//鑾峰緱涓鍊? dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 鑾峰緱瀵瑰簲鐨勬椂闂村鹼紝鍗曚綅涓虹 }while(dfTim<0.000001);鍏跺畾鏃惰宸竴鑸笉瓚呰繃0.5寰錛岀簿搴︿笌CPU絳夋満鍣ㄩ厤緗湁鍏熾?br>
]]>
榪欐槸涓綃囨寚瀵兼偍濡備綍鍦∕icrosoft Visual Studio涓嬪涔燬TL騫惰繘琛屽疄璺電殑鏂囩珷銆傝繖綃囨枃绔犱粠STL鐨勫熀紜鐭ヨ瘑璁茶搗錛屽驚搴忔笎榪涳紝閫愭娣卞叆錛屾秹鍙婂埌浜哠TL緙栧啓浠g爜鐨勬柟娉曘丼TL浠g爜鐨勭紪璇戝拰璋冭瘯銆佸懡鍚嶇┖闂達紙namespace錛夈丼TL涓殑ANSI / ISO瀛楃涓層佸悇縐嶄笉鍚岀被鍨嬬殑瀹瑰櫒錛坈ontainer錛夈佹ā鏉匡紙template錛夈佹父鏍囷紙Iterator錛夈佺畻娉曪紙Algorithms錛夈佸垎閰嶅櫒錛圓llocator錛夈佸鍣ㄧ殑宓屽絳夋柟闈㈢殑闂錛屼綔鑰呭湪榪欑瘒鏂囩珷涓璇昏呮彁鍑轟簡涓浜涘緩璁紝騫舵寚鍑轟簡浣跨敤STL鏃跺簲璇ユ敞鎰忕殑闂銆傝繖綃囨枃绔犺鐩栭潰騫匡紝瑙嗚鍏ㄩ潰銆備笉浠呬粎閫傚悎鍒濆鑰呭涔燬TL錛屾洿鏄箍澶ц鑰呬嬌鐢⊿TL緙栫▼鐨勫疄璺墊寚鍗椼?br>
STL綆浠?br>
STL (鏍囧噯妯$増搴擄紝Standard Template Library)鏄綋浠婃瘡涓粠浜婥++緙栫▼鐨勪漢闇瑕佹帉鎻$殑涓欏逛笉閿欑殑鎶鏈傛垜瑙夊緱姣忎竴涓垵瀛TL鐨勪漢搴旇鑺辮垂涓孌墊椂闂存潵鐔熸倝瀹冿紝姣斿錛屽涔燬TL鏃朵細鏈夋ュ墽鍗囬檷鐨勫涔犳洸綰匡紝騫朵笖鏈変竴浜涘懡鍚嶆槸涓嶅お瀹規槗鍑洿瑙夊氨鑳藉璁頒綇鐨勶紙涔熻鏄ソ璁扮殑鍚嶅瓧宸茬粡琚敤鍏変簡錛夛紝鐒惰屽鏋滀竴鏃︿綘鎺屾彙浜哠TL錛屼綘灝變笉浼氳寰楀ご鐥涗簡銆傚拰MFC鐩告瘮錛孲TL鏇村姞澶嶆潅鍜屽己澶с?br>STL鏈変互涓嬬殑涓浜涗紭鐐癸細
鍙互鏂逛究瀹規槗鍦板疄鐜版悳绱㈡暟鎹垨瀵規暟鎹帓搴忕瓑涓緋誨垪鐨勭畻娉曪紱
璋冭瘯紼嬪簭鏃舵洿鍔犲畨鍏ㄥ拰鏂逛究錛?br>
鍗充嬌鏄漢浠敤STL鍦║NIX騫沖彴涓嬪啓鐨勪唬鐮佷綘涔熷彲浠ュ緢瀹規槗鍦扮悊瑙o紙鍥犱負STL鏄法騫沖彴鐨勶級銆?br>
鑳屾櫙鐭ヨ瘑
鍐欒繖涓閮ㄥ垎鏄涓浜涘垵瀛﹁綆楁満鐨勮鑰呭湪瀵屾湁鎸戞垬鎬х殑璁$畻鏈虹瀛﹂鍩熸湁涓涓壇濂界殑寮绔紝鑰屼笉蹇呰垂鍔涘湴浜嗚В閭f棤絀鋒棤灝界殑琛岃瘽鏈鍜屾矇闂風殑瑙勫垯錛屽湪榪欓噷浠呬粎鎶婇偅浜涜璇濆拰瑙勫垯褰撲綔STLer浠敤浜庤嚜濞辯殑鍒涢犲搧鍚с?br>
浣跨敤浠g爜
鏈枃浣跨敤鐨勪唬鐮佸湪STL瀹炶返涓富瑕佸叿鏈夋寚瀵兼剰涔夈?br>
涓浜涘熀紜姒傚康鐨勫畾涔?br>
妯℃澘錛圱emplate錛夆斺旂被錛堜互鍙婄粨鏋勭瓑鍚勭鏁版嵁綾誨瀷鍜屽嚱鏁幫級鐨勫畯錛坢acro錛夈傛湁鏃跺彨鍋氱敎楗煎垏鍓叉満錛坈ookie cutter錛夛紝姝h鐨勫悕縐板簲鍙仛鑼冨瀷錛坓eneric錛夆斺斾竴涓被鐨勬ā鏉垮彨鍋氳寖鍨嬬被錛坓eneric class錛夛紝鑰屼竴涓嚱鏁扮殑妯℃澘涔熻嚜鐒惰岀劧鍦拌鍙仛鑼冨瀷鍑芥暟錛坓eneric function錛夈?br>STL鈥斺旀爣鍑嗘ā鏉垮簱錛屼竴浜涜仾鏄庝漢鍐欑殑涓浜涙ā鏉匡紝鐜板湪宸叉垚涓烘瘡涓漢鎵浣跨敤鐨勬爣鍑咰++璇█涓殑涓閮ㄥ垎銆?br>瀹瑰櫒錛圕ontainer錛夆斺斿彲瀹圭撼涓浜涙暟鎹殑妯℃澘綾匯係TL涓湁vector錛宻et錛宮ap錛宮ultimap鍜宒eque絳夊鍣ㄣ?br>鍚戦噺錛圴ector錛夆斺斿熀鏈暟緇勬ā鏉匡紝榪欐槸涓涓鍣ㄣ?br>娓告爣錛圛terator錛夆斺旇繖鏄竴涓鐗圭殑涓滆タ錛屽畠鏄竴涓寚閽堬紝鐢ㄦ潵鎸囧悜STL瀹瑰櫒涓殑鍏冪礌錛屼篃鍙互鎸囧悜鍏跺畠鐨勫厓绱犮?br>
Hello World紼嬪簭
鎴戞効鎰忓湪鎴戠殑榛勯噾鏃墮棿鍦ㄨ繖閲屽啓涓嬫垜鐨勭▼搴忥細涓涓猦ello world紼嬪簭銆傝繖涓▼搴忓皢涓涓瓧絎︿覆浼犻佸埌涓涓瓧絎﹀悜閲忎腑錛岀劧鍚庢瘡嬈℃樉紺哄悜閲忎腑鐨勪竴涓瓧絎︺傚悜閲忓氨鍍忔槸鐩涙斁鍙橀暱鏁扮粍鐨勮姳鍥紝澶х害鎵鏈塖TL瀹瑰櫒涓湁涓鍗婃槸鍩轟簬鍚戦噺鐨勶紝濡傛灉浣犳帉鎻′簡榪欎釜紼嬪簭錛屼綘渚垮樊涓嶅鎺屾彙浜嗘暣涓猄TL鐨勪竴鍗婁簡銆?br>
//紼嬪簭錛歷ector婕旂ず涓
//鐩殑錛氱悊瑙TL涓殑鍚戦噺
// #include "stdafx.h" -濡傛灉浣犱嬌鐢ㄩ緙栬瘧鐨勫ご鏂囦歡灝卞寘鍚繖涓ご鏂囦歡
#include <vector> // STL鍚戦噺鐨勫ご鏂囦歡銆傝繖閲屾病鏈?.h"銆?br>#include <iostream> // 鍖呭惈cout瀵硅薄鐨勫ご鏂囦歡銆?br>using namespace std; //淇濊瘉鍦ㄧ▼搴忎腑鍙互浣跨敤std鍛藉悕絀洪棿涓殑鎴愬憳銆?br>
char* szHW = "Hello World";
//榪欐槸涓涓瓧絎︽暟緇勶紝浠?#8221;\0”緇撴潫銆?br>
int main(int argc, char* argv[])
{
vector <char> vec; //澹版槑涓涓瓧絎﹀悜閲弙ector (STL涓殑鏁扮粍)
//涓哄瓧絎︽暟緇勫畾涔変竴涓父鏍噄terator銆?br> vector <char>::iterator vi;
//鍒濆鍖栧瓧絎﹀悜閲忥紝瀵規暣涓瓧絎︿覆榪涜寰幆錛?br> //鐢ㄦ潵鎶婃暟鎹~鏀懼埌瀛楃鍚戦噺涓紝鐩村埌閬囧埌”\0”鏃剁粨鏉熴?br> char* cptr = szHW; // 灝嗕竴涓寚閽堟寚鍚?#8220;Hello World”瀛楃涓?br> while (*cptr != '\0')
{ vec.push_back(*cptr); cptr++; }
// push_back鍑芥暟灝嗘暟鎹斁鍦ㄥ悜閲忕殑灝鵑儴銆?br>
// 灝嗗悜閲忎腑鐨勫瓧絎︿竴涓釜鍦版樉紺哄湪鎺у埗鍙?br> for (vi=vec.begin(); vi!=vec.end(); vi++)
// 榪欐槸STL寰幆鐨勮鑼冨寲鐨勫紑濮嬧斺旈氬父鏄?"!=" 錛?鑰屼笉鏄?"<"
// 鍥犱負"<" 鍦ㄤ竴浜涘鍣ㄤ腑娌℃湁瀹氫箟銆?
// begin()榪斿洖鍚戦噺璧峰鍏冪礌鐨勬父鏍囷紙iterator錛夛紝end()榪斿洖鍚戦噺鏈熬鍏冪礌鐨勬父鏍囷紙iterator錛夈?br> { cout << *vi; } // 浣跨敤榪愮畻絎?“*” 灝嗘暟鎹粠娓告爣鎸囬拡涓彁鍙栧嚭鏉ャ?br> cout << endl; // 鎹㈣
return 0;
}
push_back鏄皢鏁版嵁鏀懼叆vector錛堝悜閲忥級鎴杁eque錛堝弻绔槦鍒楋級鐨勬爣鍑嗗嚱鏁般侷nsert鏄竴涓笌涔嬬被浼肩殑鍑芥暟錛岀劧鑰屽畠鍦ㄦ墍鏈夊鍣ㄤ腑閮藉彲浠ヤ嬌鐢紝浣嗘槸鐢ㄦ硶鏇村姞澶嶆潅銆俥nd()瀹為檯涓婃槸鍙栨湯灝懼姞涓錛堝彇瀹瑰櫒涓湯灝劇殑鍓嶄竴涓厓绱狅級錛屼互渚胯寰幆姝g‘榪愯鈥斺斿畠榪斿洖鐨勬寚閽堟寚鍚戞渶闈犺繎鏁扮粍鐣岄檺鐨勬暟鎹傚氨鍍忔櫘閫氬驚鐜腑鐨勬暟緇勶紝姣斿for (i=0; i<6; i++) {ar[i] = i;} 鈥斺攁r[6]鏄笉瀛樺湪鐨勶紝鍦ㄥ驚鐜腑涓嶄細杈懼埌榪欎釜鍏冪礌錛屾墍浠ュ湪寰幆涓笉浼氬嚭鐜伴棶棰樸?br>
STL鐨勭儲鎭間箣涓鈥斺斿垵濮嬪寲
STL浠や漢鐑︽伡鐨勫湴鏂規槸鍦ㄥ畠鍒濆鍖栫殑鏃跺欍係TL涓鍣ㄧ殑鍒濆鍖栨瘮C/C++鏁扮粍鍒濆鍖栬楹葷儲鐨勫銆備綘鍙兘涓涓厓绱犱竴涓厓绱犲湴鏉ワ紝鎴栬呭厛鍒濆鍖栦竴涓櫘閫氭暟緇勫啀閫氳繃杞寲濉斁鍒板鍣ㄤ腑銆傛垜璁や負浜轟滑閫氬父鍙互榪欐牱鍋氾細
//紼嬪簭錛氬垵濮嬪寲婕旂ず
//鐩殑錛氫負浜嗚鏄嶴TL涓殑鍚戦噺鏄庢牱鍒濆鍖栫殑銆?br>
#include <cstring> // <cstring>鍜?lt;string.h>鐩稿悓
#include <vector>
using namespace std;
int ar[10] = { 12, 45, 234, 64, 12, 35, 63, 23, 12, 55 };
char* str = "Hello World";
int main(int argc, char* argv[])
{
vector <int> vec1(ar, ar+10);
vector <char> vec2(str, str+strlen(str));
return 0;
}
鍦ㄧ紪紼嬩腑錛屾湁寰堝縐嶆柟娉曟潵瀹屾垚鍚屾牱鐨勫伐浣溿傚彟涓縐嶅~鍏呭悜閲忕殑鏂規硶鏄敤鏇村姞鐔熸倝鐨勬柟鎷彿錛屾瘮濡備笅闈㈢殑紼嬪簭錛?br>
//紼嬪簭錛歷ector婕旂ず浜?br>//鐩殑錛氱悊瑙e甫鏈夋暟緇勪笅鏍囧拰鏂規嫭鍙風殑STL鍚戦噺
#include <cstring>
#include <vector>
#include <iostream>
using namespace std;
char* szHW = "Hello World";
int main(int argc, char* argv[])
{
vector <char> vec(strlen(sHW)); //涓哄悜閲忓垎閰嶅唴瀛樼┖闂?br> int i, k = 0;
char* cptr = szHW;
while (*cptr != '\0')
{ vec[k] = *cptr; cptr++; k++; }
for (i=0; i<vec.size(); i++)
{ cout << vec[i]; }
cout << endl;
return 0;
}
榪欎釜渚嬪瓙鏇村姞娓呮櫚錛屼絾鏄娓告爣錛坕terator錛夌殑鎿嶄綔灝戜簡錛屽茍涓斿畾涔変簡棰濆鐨勬暣褰㈡暟浣滀負涓嬫爣錛岃屼笖錛屼綘蹇呴』娓呮鍦板湪紼嬪簭涓鏄庝負鍚戦噺鍒嗛厤澶氬皯鍐呭瓨絀洪棿銆?br>
鍛藉悕絀洪棿錛圢amespace錛?br>
涓嶴TL鐩稿叧鐨勬蹇墊槸鍛藉悕絀洪棿錛坣amespace錛夈係TL瀹氫箟鍦╯td鍛藉悕絀洪棿涓傛湁3縐嶆柟娉曞0鏄庝嬌鐢ㄧ殑鍛藉悕絀洪棿錛?br>
1錛庣敤using鍏抽敭瀛椾嬌鐢ㄨ繖涓懡鍚嶇┖闂達紝鍦ㄦ枃浠剁殑欏墮儴錛屼絾鍦ㄥ0鏄庣殑澶存枃浠朵笅闈㈠姞鍏ワ細
using namespace std;
榪欏鍗曚釜宸ョ▼鏉ヨ鏄渶綆鍗曚篃鏄渶濂界殑鏂規硶錛岃繖涓柟娉曞彲浠ユ妸浣犵殑浠g爜闄愬畾鍦╯td鍛藉悕絀洪棿涓?br>
2錛庝嬌鐢ㄦ瘡涓涓ā鏉垮墠瀵規瘡涓涓浣跨敤鐨勫璞¤繘琛屽0鏄庯紙灝卞儚鍘熷艦鍖栵級錛?br>using std::cout;
using std::endl;
using std::flush;
using std::set;
using std::inserter;
灝界榪欐牱鍐欐湁浜涘啑闀匡紝浣嗗彲浠ュ璁板繂浣跨敤鐨勫嚱鏁版瘮杈冩湁鍒╋紝騫朵笖浣犲彲浠ュ鏄撳湴澹版槑騫朵嬌鐢ㄥ叾浠栧懡鍚嶇┖闂翠腑鐨勬垚鍛樸?br>
3錛庡湪姣忎竴嬈′嬌鐢╯td鍛藉悕絀洪棿涓殑妯$増鏃訛紝浣跨敤std鍩熸爣璇嗙銆傛瘮濡傦細
typedef std::vector VEC_STR;
榪欑鏂規硶铏界劧鍐欒搗鏉ユ瘮杈冨啑闀匡紝浣嗘槸鏄湪娣峰悎浣跨敤澶氫釜鍛藉悕絀洪棿鏃剁殑鏈濂芥柟娉曘備竴浜汼TL鐨勭媯鐑呬竴鐩翠嬌鐢ㄨ繖縐嶆柟娉曪紝騫朵笖鎶婁笉浣跨敤榪欑鏂規硶鐨勪漢瑙嗕負寮傜被銆備竴浜涗漢浼氶氳繃榪欑鏂規硶寤虹珛涓浜涘畯鏉ョ畝鍖栭棶棰樸?br>
闄ゆ涔嬪錛屼綘鍙互鎶妘sing namespace std鍔犲叆鍒頒換浣曞煙涓紝姣斿鍙互鍔犲叆鍒板嚱鏁扮殑澶撮儴鎴栦竴涓帶鍒跺驚鐜綋涓?br>
涓浜涘緩璁?br>
涓轟簡閬垮厤鍦ㄨ皟璇曟ā寮忥紙debug mode錛夊嚭鐜版伡浜虹殑璀﹀憡錛屼嬌鐢ㄤ笅闈㈢殑緙栬瘧鍣ㄥ懡浠わ細
#pragma warning(disable: 4786)
鍙︿竴鏉¢渶瑕佹敞鎰忕殑鏄紝浣犲繀欏葷‘淇濆湪涓や釜灝栨嫭鍙蜂箣闂存垨灝栨嫭鍙峰拰鍚嶅瓧涔嬮棿鐢ㄧ┖鏍奸殧寮錛屽洜涓烘槸涓轟簡閬垮厤鍚?#8220;>>”縐諱綅榪愮畻絎︽販娣嗐傛瘮濡?br>vector <list<int>> veclis;
榪欐牱鍐欎細鎶ラ敊錛岃岃繖鏍峰啓錛?br>vector <list <int> > veclis;
灝卞彲浠ラ伩鍏嶉敊璇?br>
STL瀹炶返鎸囧崡錛堜腑錛?br>
STL瀹炶返鎸囧崡 Practical Guide to STL
浣滆咃細Jeff Bogan
緲昏瘧錛氬懆緲?br>
錛堟帴涓婄瘒錛?br>
鍙︿竴縐嶅鍣ㄢ斺旈泦鍚堬紙set錛?br>
榪欐槸寰蔣甯姪鏂囨。涓闆嗗悎錛坰et錛夌殑瑙i噴錛?#8220;鎻忚堪浜嗕竴涓帶鍒跺彉闀垮厓绱犲簭鍒楃殑瀵硅薄錛堟敞錛歴et涓殑key鍜寁alue鏄疜ey綾誨瀷鐨勶紝鑰宮ap涓殑key鍜寁alue鏄竴涓猵air緇撴瀯涓殑涓や釜鍒嗛噺錛夌殑妯℃澘綾伙紝姣忎竴涓厓绱犲寘鍚簡涓涓帓搴忛敭錛坰ort key錛夊拰涓涓?value)銆傚榪欎釜搴忓垪鍙互榪涜鏌ユ壘銆佹彃鍏ャ佸垹闄ゅ簭鍒椾腑鐨勪換鎰忎竴涓厓绱狅紝鑰屽畬鎴愯繖浜涙搷浣滅殑鏃墮棿鍚岃繖涓簭鍒椾腑鍏冪礌涓暟鐨勫鏁版垚姣斾緥鍏崇郴錛屽茍涓斿綋娓告爣鎸囧悜涓涓凡鍒犻櫎鐨勫厓绱犳椂錛屽垹闄ゆ搷浣滄棤鏁堛?#8221;
鑰屼竴涓粡榪囨洿姝g殑鍜屾洿鍔犲疄闄呯殑瀹氫箟搴旇鏄細涓涓泦鍚堬紙set錛夋槸涓涓鍣紝瀹冨叾涓墍鍖呭惈鐨勫厓绱犵殑鍊兼槸鍞竴鐨勩傝繖鍦ㄦ敹闆嗕竴涓暟鎹殑鍏蜂綋鍊肩殑鏃跺欐槸鏈夌敤鐨勩傞泦鍚堜腑鐨勫厓绱犳寜涓瀹氱殑欏哄簭鎺掑垪錛屽茍琚綔涓洪泦鍚堜腑鐨勫疄渚嬨傚鏋滀綘闇瑕佷竴涓敭/鍊煎錛坧air錛夋潵瀛樺偍鏁版嵁錛宮ap鏄竴涓洿濂界殑閫夋嫨銆備竴涓泦鍚堥氳繃涓涓摼琛ㄦ潵緇勭粐錛屽湪鎻掑叆鎿嶄綔鍜屽垹闄ゆ搷浣滀笂姣斿悜閲忥紙vector錛夊揩錛屼絾鏌ユ壘鎴栨坊鍔犳湯灝劇殑鍏冪礌鏃朵細鏈変簺鎱€?br>涓嬮潰鏄竴涓緥瀛愶細
//紼嬪簭錛歴et婕旂ず
//鐩殑錛氱悊瑙TL涓殑闆嗗悎錛坰et錛?br>
#include <string>
#include <set>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
set <string> strset;
set <string>::iterator si;
strset.insert("cantaloupes");
strset.insert("apple");
strset.insert("orange");
strset.insert("banana");
strset.insert("grapes");
strset.insert("grapes");
for (si=strset.begin(); si!=strset.end(); si++)
{ cout << *si << " "; }
cout << endl;
return 0;
}
// 杈撳嚭錛?apple banana cantaloupes grapes orange
//娉ㄦ剰錛氳緭鍑虹殑闆嗗悎涓殑鍏冪礌鏄寜瀛楁瘝澶у皬欏哄簭鎺掑垪鐨勶紝鑰屼笖姣忎釜鍊奸兘涓嶉噸澶嶃?br>
濡傛灉浣犳劅鍏磋叮鐨勮瘽錛屼綘鍙互灝嗚緭鍑哄驚鐜敤涓嬮潰鐨勪唬鐮佹浛鎹細
copy(strset.begin(), strset.end(), ostream_iterator<string>(cout, " "));
.闆嗗悎錛坰et錛夎櫧鐒舵洿寮哄ぇ錛屼絾鎴戜釜浜鴻涓哄畠鏈変簺涓嶆竻鏅扮殑鍦版柟鑰屼笖鏇村鏄撳嚭閿欙紝濡傛灉浣犳槑鐧戒簡榪欎竴鐐癸紝浣犱細鐭ラ亾鐢ㄩ泦鍚堬紙set錛夊彲浠ュ仛浠涔堛?br>
鎵鏈夌殑STL瀹瑰櫒
瀹瑰櫒錛圕ontainer錛夌殑姒傚康鐨勫嚭鐜版棭浜庢ā鏉匡紙template錛夛紝瀹冨師鏈槸涓涓綆楁満縐戝棰嗗煙涓殑涓涓噸瑕佹蹇碉紝浣嗗湪榪欓噷錛屽畠鐨勬蹇靛拰STL娣峰悎鍦ㄤ竴璧蜂簡銆備笅闈㈡槸鍦⊿TL涓嚭鐜扮殑7縐嶅鍣細
vector錛堝悜閲忥級鈥斺擲TL涓爣鍑嗚屽畨鍏ㄧ殑鏁扮粍銆傚彧鑳藉湪vector 鐨?#8220;鍓嶉潰”澧炲姞鏁版嵁銆?br>deque錛堝弻绔槦鍒梔ouble-ended queue錛夆斺斿湪鍔熻兘涓婂拰vector鐩鎬技錛屼絾鏄彲浠ュ湪鍓嶅悗涓ょ鍚戝叾涓坊鍔犳暟鎹?
list錛堝垪琛級鈥斺旀父鏍囦竴嬈″彧鍙互縐誨姩涓姝ャ傚鏋滀綘瀵歸摼琛ㄥ凡緇忓緢鐔熸倝錛岄偅涔圫TL涓殑list鍒欐槸涓涓弻鍚戦摼琛紙姣忎釜鑺傜偣鏈夋寚鍚戝墠椹卞拰鎸囧悜鍚庣戶鐨勪袱涓寚閽堬級銆?br>set錛堥泦鍚堬級鈥斺斿寘鍚簡緇忚繃鎺掑簭浜嗙殑鏁版嵁錛岃繖浜涙暟鎹殑鍊?value)蹇呴』鏄敮涓鐨勩?br>map錛堟槧灝勶級鈥斺旂粡榪囨帓搴忎簡鐨勪簩鍏冪粍鐨勯泦鍚堬紝map涓殑姣忎釜鍏冪礌閮芥槸鐢變袱涓肩粍鎴愶紝鍏朵腑鐨刱ey錛堥敭鍊鹼紝涓涓猰ap涓殑閿煎繀欏繪槸鍞竴鐨勶級鏄湪鎺掑簭鎴栨悳绱㈡椂浣跨敤錛屽畠鐨勫煎彲浠ュ湪瀹瑰櫒涓噸鏂拌幏鍙栵紱鑰屽彟涓涓兼槸璇ュ厓绱犲叧鑱旂殑鏁板箋傛瘮濡傦紝闄や簡鍙互ar[43] = "overripe"榪欐牱鎵懼埌涓涓暟鎹紝map榪樺彲浠ラ氳繃ar["banana"] = "overripe"榪欐牱鐨勬柟娉曟壘鍒頒竴涓暟鎹傚鏋滀綘鎯寵幏寰楀叾涓殑鍏冪礌淇℃伅錛岄氳繃杈撳叆鍏冪礌鐨勫叏鍚嶅氨鍙互杞繪澗瀹炵幇銆?br>multiset錛堝閲嶉泦錛夆斺斿拰闆嗗悎錛坰et錛夌浉浼鹼紝鐒惰屽叾涓殑鍊間笉瑕佹眰蹇呴』鏄敮涓鐨勶紙鍗沖彲浠ユ湁閲嶅錛夈?br>multimap錛堝閲嶆槧灝勶級鈥斺斿拰鏄犲皠錛坢ap錛夌浉浼鹼紝鐒惰屽叾涓殑閿間笉瑕佹眰蹇呴』鏄敮涓鐨勶紙鍗沖彲浠ユ湁閲嶅錛夈?br>娉ㄦ剰錛氬鏋滀綘闃呰寰蔣鐨勫府鍔╂枃妗o紝浣犱細閬囧埌瀵規瘡縐嶅鍣ㄧ殑鏁堢巼鐨勯檲榪般傛瘮濡傦細log(n*n)鐨勬彃鍏ユ椂闂淬傞櫎闈炰綘瑕佸鐞嗗ぇ閲忕殑鏁版嵁錛屽惁鍒欒繖浜涙椂闂寸殑褰卞搷鏄彲浠ュ拷鐣ョ殑銆傚鏋滀綘鍙戠幇浣犵殑紼嬪簭鏈夋槑鏄劇殑婊炲悗鎰熸垨鑰呴渶瑕佸鐞嗘椂闂存敻鍏籌紙time critical錛夌殑浜嬫儏錛屼綘鍙互鍘諱簡瑙f洿澶氭湁鍏沖悇縐嶅鍣ㄨ繍琛屾晥鐜囩殑璇濋銆?br>
鎬庢牱鍦ㄤ竴涓猰ap涓嬌鐢ㄧ被錛?br>
Map鏄竴涓氳繃key錛堥敭錛夋潵鑾峰緱value(鍊?鐨勬ā鏉跨被銆?br>鍙︿竴涓棶棰樻槸浣犲笇鏈涘湪map涓嬌鐢ㄨ嚜宸辯殑綾昏屼笉鏄凡鏈夌殑鏁版嵁綾誨瀷錛屾瘮濡傜幇鍦ㄥ凡緇忕敤榪囩殑int銆傚緩绔嬩竴涓?#8220;涓烘ā鏉垮噯澶囩殑錛坱emplate-ready錛?#8221;綾伙紝浣犲繀欏葷‘淇濆湪璇ョ被涓寘鍚竴浜涙垚鍛樺嚱鏁板拰閲嶈澆鎿嶄綔絎︺備笅闈㈢殑涓浜涙垚鍛樻槸蹇呴』鐨勶細
緙虹渷鐨勬瀯閫犲嚱鏁幫紙閫氬父涓虹┖錛?br>
鎷瘋礉鏋勯犲嚱鏁?br>
閲嶈澆鐨?#8221;=”榪愮畻絎?br>
浣犲簲璇ラ噸杞藉敖鍙兘澶氱殑榪愮畻絎︽潵婊¤凍鐗瑰畾妯℃澘鐨勯渶瑕侊紝姣斿錛屽鏋滀綘鎯沖畾涔変竴涓被浣滀負 map涓殑閿紙key錛夛紝浣犲繀欏婚噸杞界浉鍏崇殑榪愮畻絎︺備絾鍦ㄨ繖閲屼笉瀵歸噸杞借繍綆楃鍋氳繃澶氳璁轟簡銆?br>
//紼嬪簭錛氭槧灝勮嚜瀹氫箟鐨勭被銆?br>//鐩殑錛氳鏄庡湪map涓庢牱浣跨敤鑷畾涔夌殑綾匯?br>
#include <string>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class CStudent
{
public :
int nStudentID;
int nAge;
public :
//緙虹渷鏋勯犲嚱鏁扳斺旈氬父涓虹┖
CStudent() { }
// 瀹屾暣鐨勬瀯閫犲嚱鏁?br> CStudent(int nSID, int nA) { nStudentID=nSID; nAge=nA; }
//鎷瘋礉鏋勯犲嚱鏁?br> CStudent(const CStudent& ob)
{ nStudentID=ob.nStudentID; nAge=ob.nAge; }
// 閲嶈澆“=”
void operator = (const CStudent& ob)
{ nStudentID=ob.nStudentID; nAge=ob.nAge; }
};
int main(int argc, char* argv[])
{
map <string, CStudent> mapStudent;
mapStudent["Joe Lennon"] = CStudent(103547, 22);
mapStudent["Phil McCartney"] = CStudent(100723, 22);
mapStudent["Raoul Starr"] = CStudent(107350, 24);
mapStudent["Gordon Hamilton"] = CStudent(102330, 22);
// 閫氳繃濮撳悕鏉ヨ闂瓹student綾諱腑鐨勬垚鍛?br> cout << "The Student number for Joe Lennon is " <<
(mapStudent["Joe Lennon"].nStudentID) << endl;
return 0;
}
TYPEDEF
濡傛灉浣犲枩嬈嬌鐢╰ypedef鍏抽敭瀛楋紝涓嬮潰鏄釜渚嬪瓙錛?br>typedef set <int> SET_INT;
typedef SET_INT::iterator SET_INT_ITER
緙栧啓浠g爜鐨勪竴涓範鎯氨鏄嬌鐢ㄥぇ鍐欏瓧姣嶅拰涓嬪垝綰挎潵鍛藉悕鏁版嵁綾誨瀷銆?br>
ANSI / ISO瀛楃涓?br>
ANSI/ISO瀛楃涓插湪STL瀹瑰櫒涓嬌鐢ㄥ緱寰堟櫘閬嶃傝繖鏄爣鍑嗙殑瀛楃涓茬被錛屽茍寰楀埌浜嗗箍娉涘湴鎻愬★紝鐒惰屽湪緙轟箯鏍煎紡澹版槑鐨勬儏鍐典笅灝變細鍑洪棶棰樸備綘蹇呴』浣跨敤“<<”鍜岃緭鍏ヨ緭鍑烘祦錛坕ostream錛変唬鐮侊紙濡俤ec, width絳夛級灝嗗瓧絎︿覆涓茶仈璧鋒潵銆?br>鍙湪蹇呰鐨勬椂鍊欎嬌鐢╟_str()鏉ラ噸鏂拌幏寰楀瓧絎︽寚閽堛?br>
STL瀹炶返鎸囧崡錛堜笅錛?br>STL瀹炶返鎸囧崡 Practical Guide to STL
浣滆咃細Jeff Bogan
緲昏瘧錛氬懆緲?br>
錛堟帴涓瘒錛?br>
娓告爣錛圛terator錛?br>
鎴戣榪囨父鏍囨槸鎸囬拡錛屼絾涓嶄粎浠呮槸鎸囬拡銆傛父鏍囧拰鎸囬拡寰堝儚錛屽姛鑳藉緢鍍忔寚閽堬紝浣嗘槸瀹為檯涓婏紝娓告爣鏄氳繃閲嶈澆涓鍏冪殑”*”鍜?#8221;->”鏉ヤ粠瀹瑰櫒涓棿鎺ュ湴榪斿洖涓涓箋傚皢榪欎簺鍊煎瓨鍌ㄥ湪瀹瑰櫒涓茍涓嶆槸涓涓ソ涓繪剰錛屽洜涓烘瘡褰撲竴涓柊鍊兼坊鍔犲埌瀹瑰櫒涓垨鑰呮湁涓涓間粠瀹瑰櫒涓垹闄わ紝榪欎簺鍊煎氨浼氬け鏁堛傚湪鏌愮紼嬪害涓婏紝娓告爣鍙互鐪嬩綔鏄彞鏌勶紙handle錛夈傞氬父鎯呭喌涓嬫父鏍囷紙iterator錛夌殑綾誨瀷鍙互鏈夋墍鍙樺寲錛岃繖鏍峰鍣ㄤ篃浼氭湁鍑犵涓嶅悓鏂瑰紡鐨勮漿鍙橈細
iterator鈥斺斿浜庨櫎浜唙ector浠ュ鐨勫叾浠栦換浣曞鍣紝浣犲彲浠ラ氳繃榪欑娓告爣鍦ㄤ竴嬈℃搷浣滀腑鍦ㄥ鍣ㄤ腑鏈濆悜鍓嶇殑鏂瑰悜璧頒竴姝ャ傝繖鎰忓懗鐫瀵逛簬榪欑娓告爣浣犲彧鑳戒嬌鐢?#8220;++”鎿嶄綔絎︺傝屼笉鑳戒嬌鐢?#8220;--”鎴?#8220;+=”鎿嶄綔絎︺傝屽浜巚ector榪欎竴縐嶅鍣紝浣犲彲浠ヤ嬌鐢?#8220;+=”銆?#8220;鈥?#8221;銆?#8220;++”銆?#8220;-=”涓殑浠諱綍涓縐嶆搷浣滅鍜?#8220;<”銆?#8220;<=”銆?#8220;>”銆?#8220;>=”銆?#8220;==”銆?#8220;!=”絳夋瘮杈冭繍綆楃銆?br>reverse_iterator 鈥斺斿鏋滀綘鎯崇敤鍚戝悗鐨勬柟鍚戣屼笉鏄悜鍓嶇殑鏂瑰悜鐨勬父鏍囨潵閬嶅巻闄ector涔嬪鐨勫鍣ㄤ腑鐨勫厓绱狅紝浣犲彲浠ヤ嬌鐢╮everse_iterator 鏉ュ弽杞亶鍘嗙殑鏂瑰悜錛屼綘榪樺彲浠ョ敤rbegin()鏉ヤ唬鏇縝egin()錛岀敤rend()浠f浛end()錛岃屾鏃剁殑“++”鎿嶄綔絎︿細鏈濆悜鍚庣殑鏂瑰悜閬嶅巻銆?
const_iterator 鈥斺斾竴涓悜鍓嶆柟鍚戠殑娓告爣錛屽畠榪斿洖涓涓父鏁板箋備綘鍙互浣跨敤榪欑綾誨瀷鐨勬父鏍囨潵鎸囧悜涓涓彧璇葷殑鍊箋?br>const_reverse_iterator 鈥斺斾竴涓湞鍙嶆柟鍚戦亶鍘嗙殑娓告爣錛屽畠榪斿洖涓涓父鏁板箋?br>
Set鍜孧ap涓殑鎺掑簭
闄や簡綾誨瀷鍜屽煎錛屾ā鏉垮惈鏈夊叾浠栫殑鍙傛暟銆備綘鍙互浼犻掍竴涓洖璋冨嚱鏁幫紙閫氬父鎵璇寸殑澹版槑“predicate”鈥斺旇繖鏄甫鏈変竴涓弬鏁扮殑鍑芥暟榪斿洖涓涓竷灝斿鹼級銆備緥濡傦紝濡傛灉浣犳兂鑷姩寤虹珛涓涓泦鍚堬紝闆嗗悎涓殑鍏冪礌鎸夊崌搴忔帓鍒楋紝浣犲彲浠ョ敤綆鏄庣殑鏂規硶寤虹珛涓涓猻et綾伙細
set <int, greater<int> > set1
greater 鏄彟涓涓ā鏉垮嚱鏁幫紙鑼冨瀷鍑芥暟錛夛紝褰撳兼斁緗湪瀹瑰櫒涓悗錛屽畠鐢ㄦ潵涓鴻繖浜涘兼帓搴忋傚鏋滀綘鎯蟲寜闄嶅簭鎺掑垪榪欎簺鍊鹼紝浣犲彲浠ヨ繖鏍峰啓錛?br>
set <int, less<int> > set1
鍦ㄥ疄鐜扮畻娉曟椂錛屽皢澹版槑錛坧redicate錛変綔涓轟竴涓弬鏁頒紶閫掑埌涓涓猄TL妯℃澘綾諱腑鏃朵細閬囧埌寰堝鐨勫叾浠栨儏鍐碉紝涓嬮潰灝嗕細瀵硅繖浜涙儏鍐佃繘琛岃緇嗘弿榪般?br>
STL 鐨勭儲鎭間箣浜屸斺旈敊璇俊鎭?br>
榪欎簺妯℃澘鐨勫懡鍚嶉渶瑕佸緙栬瘧鍣ㄨ繘琛屾墿鍏咃紝鎵浠ュ綋緙栬瘧鍣ㄥ洜鏌愮鍘熷洜鍙戠敓鏁呴殰鏃訛紝瀹冧細鍒楀嚭涓孌靛緢闀跨殑閿欒淇℃伅錛屽茍涓旇繖浜涢敊璇俊鎭櫐娑╅毦鎳傘傛垜瑙夊緱澶勭悊榪欐牱鐨勯毦棰樻病鏈変粈涔堝ソ鍔炴硶銆備絾鏈濂界殑鏂規硶鏄幓鏌ユ壘騫朵粩緇嗙爺絀墮敊璇俊鎭寚鏄庝唬鐮佹鐨勫熬绔傝繕鏈変竴涓儲鎭煎氨鏄細褰撲綘鍙屽嚮閿欒淇℃伅鏃訛紝瀹冧細灝嗛敊璇寚鍚戞ā鐗堝簱鐨勫唴閮ㄤ唬鐮侊紝鑰岃繖浜涗唬鐮佸氨鏇撮毦璇諱簡銆備竴鑸儏鍐典笅錛岀籂閿欑殑鏈濂芥柟娉曟槸閲嶆柊媯鏌ヤ竴涓嬩綘鐨勪唬鐮侊紝榪愯鏃跺拷鐣ユ墍鏈夌殑璀﹀憡淇℃伅銆?br>
綆楁硶錛圓lgorithms錛?br>
綆楁硶鏄ā鏉夸腑浣跨敤鐨勫嚱鏁般傝繖鎵嶇湡姝e紑濮嬩綋鐜癝TL鐨勫己澶т箣澶勩備綘鍙互瀛︿範涓浜涘ぇ澶氭暟妯℃澘瀹瑰櫒涓兘浼氱敤鍒扮殑涓浜涚畻娉曞嚱鏁幫紝榪欐牱浣犲彲浠ラ氳繃鏈綆渚跨殑鏂瑰紡榪涜鎺掑簭銆佹煡鎵俱佷氦鎹㈢瓑鎿嶄綔銆係TL涓寘鍚潃涓緋誨垪瀹炵幇綆楁硶鐨勫嚱鏁般傛瘮濡傦細sort(vec.begin()+1, vec.end()-1)鍙互瀹炵幇瀵歸櫎絎竴涓拰鏈鍚庝竴涓厓绱犵殑鍏朵粬鍏冪礌鐨勬帓搴忔搷浣溿?br>瀹瑰櫒鑷韓涓嶈兘浣跨敤綆楁硶錛屼絾涓や釜瀹瑰櫒涓殑娓告爣鍙互闄愬畾瀹瑰櫒涓嬌鐢ㄧ畻娉曠殑鍏冪礌銆傛棦鐒惰繖鏍鳳紝綆楁硶涓嶇洿鎺ュ彈鍒板鍣ㄧ殑闄愬埗錛岃屾槸閫氳繃閲囩敤娓告爣錛岀畻娉曟墠鑳藉寰楀埌鏀寔銆傛澶栵紝寰堝嬈′綘浼氶亣鍒頒紶閫掍竴涓凡緇忓噯澶囧ソ浜嗙殑鍑芥暟錛堜互鍓嶆彁鍒扮殑澹版槑錛歱redicate錛変綔涓哄弬鏁幫紝浣犱篃鍙互浼犻掍互鍓嶇殑鏃у箋?br>涓嬮潰鐨勪緥瀛愭紨紺轟簡鎬庢牱浣跨敤綆楁硶錛?br>
//紼嬪簭錛氭祴璇曞垎鏁扮粺璁?br>//鐩殑錛氶氳繃瀵瑰悜閲忎腑淇濆瓨鐨勫垎鏁扮殑鎿嶄綔璇存槑鎬庢牱浣跨敤綆楁硶
#include <algorithm> //濡傛灉瑕佷嬌鐢ㄧ畻娉曞嚱鏁幫紝浣犲繀欏昏鍖呭惈榪欎釜澶存枃浠躲?br>#include <numeric> // 鍖呭惈accumulate錛堟眰鍜岋級鍑芥暟鐨勫ご鏂囦歡
#include <vector>
#include <iostream>
using namespace std;
int testscore[] = {67, 56, 24, 78, 99, 87, 56};
//鍒ゆ柇涓涓垚緇╂槸鍚﹂氳繃浜嗚冭瘯
bool passed_test(int n)
{
return (n >= 60);
}
// 鍒ゆ柇涓涓垚緇╂槸鍚︿笉鍙婃牸
bool failed_test(int n)
{
return (n < 60);
}
int main(int argc, char* argv[])
{
int total;
// 鍒濆鍖栧悜閲忥紝浣夸箣鑳藉瑁呭叆testscore鏁扮粍涓殑鍏冪礌
vector <int> vecTestScore(testscore,
testscore + sizeof(testscore) / sizeof(int));
vector <int>::iterator vi;
// 鎺掑簭騫舵樉紺哄悜閲忎腑鐨勬暟鎹?br> sort(vecTestScore.begin(), vecTestScore.end());
cout << "Sorted Test Scores:" << endl;
for (vi=vecTestScore.begin(); vi != vecTestScore.end(); vi++)
{ cout << *vi << ", "; }
cout << endl;
// 鏄劇ず緇熻淇℃伅
// min_element 榪斿洖涓涓?_iterator_ 綾誨瀷鐨勫璞★紝璇ュ璞℃寚鍚戝兼渶灝忕殑閭d釜鍏冪礌銆?br> //“*”榪愮畻絎︽彁鍙栧厓绱犱腑鐨勫箋?br> vi = min_element(vecTestScore.begin(), vecTestScore.end());
cout << "The lowest score was " << *vi << "." << endl;
//涓巑in_element綾諱技錛宮ax_element鏄夊嚭鏈澶у箋?br> vi = max_element(vecTestScore.begin(), vecTestScore.end());
cout << "The highest score was " << *vi << "." << endl;
// 浣跨敤澹版槑鍑芥暟錛坧redicate function錛屾寚vecTestScore.begin()鍜寁ecTestScore.end()錛夋潵紜畾閫氳繃鑰冭瘯鐨勪漢鏁般?br> cout << count_if(vecTestScore.begin(), vecTestScore.end(), passed_test) <<
" out of " << vecTestScore.size() <<
" students passed the test" << endl;
// 紜畾鏈夊灝戜漢鑰冭瘯鎸備簡
cout << count_if(vecTestScore.begin(),
vecTestScore.end(), failed_test) <<
" out of " << vecTestScore.size() <<
" students failed the test" << endl;
//璁$畻鎴愮嘩鎬誨拰
total = accumulate(vecTestScore.begin(),
vecTestScore.end(), 0);
// 璁$畻鏄劇ず騫沖潎鎴愮嘩
cout << "Average score was " <<
(total / (int)(vecTestScore.size())) << endl;
return 0;
}
Allocator錛堝垎閰嶅櫒錛?br>
Allocator鐢ㄥ湪妯℃澘鐨勫垵濮嬪寲闃舵錛屾槸涓哄璞″拰鏁扮粍榪涜鍒嗛厤鍐呭瓨絀洪棿鍜岄噴鏀劇┖闂存搷浣滅殑妯℃澘綾匯傚畠鍦ㄥ悇縐嶆儏鍐典笅鎵紨鐫寰堢縐樼殑瑙掕壊錛屽畠鍏沖績鐨勬槸楂樺眰鍐呭瓨鐨勪紭鍖栵紝鑰屼笖瀵歸粦鐩掓祴璇曟潵璇達紝浣跨敤Allocator鏄渶濂界殑閫夋嫨銆傞氬父錛屾垜浠笉闇瑕佹槑紜寚鏄庡畠錛屽洜涓哄畠浠氬父鏄綔涓轟笉鐢ㄦ坊鍔犵殑緙虹渷鐨勫弬鏁板嚭鐜扮殑銆傚鏋滃湪涓撲笟鐨勬祴璇曞伐浣滀腑鍑虹幇浜咥llocator錛屼綘鏈濂芥悶娓呮瀹冩槸浠涔堛?br>
Embed Templates錛堝祵鍏ュ紡妯$増錛夊拰Derive Templates錛堝熀妯℃澘錛?br>
姣忓綋浣犱嬌鐢ㄤ竴涓櫘閫氱殑綾葷殑鏃跺欙紝浣犱篃鍙互鍦ㄥ叾涓嬌鐢ㄤ竴涓猄TL綾匯傚畠鏄彲浠ヨ宓屽叆鐨勶細
class CParam
{
string name;
string unit;
vector <double> vecData;
};
鎴栬呭皢瀹冧綔涓轟竴涓熀綾伙細
class CParam : public vector <double>
{
string name;
string unit;
};
STL妯$増綾諱綔涓哄熀綾繪椂闇瑕佽皚鎱庛傝繖闇瑕佷綘閫傚簲榪欑緙栫▼鏂瑰紡銆?br>
妯$増涓殑妯$増
涓烘瀯寤轟竴涓鏉傜殑鏁版嵁緇撴瀯錛屼綘鍙互灝嗕竴涓ā鏉挎鍏ュ彟涓涓ā鏉夸腑錛堝嵆“妯$増宓屽”錛夈備竴鑸渶濂界殑鏂規硶鏄湪紼嬪簭鍓嶉潰浣跨敤typedef鍏抽敭瀛楁潵瀹氫箟涓涓湪鍙︿竴涓ā鏉夸腑浣跨敤鐨勬ā鐗堢被鍨嬨?br>
// 紼嬪簭錛氬湪鍚戦噺涓祵鍏ュ悜閲忕殑婕旂ず銆?br>//鐩殑錛氳鏄庢庢牱浣跨敤宓屽鐨凷TL瀹瑰櫒銆?br>
#include <iostream>
#include <vector>
using namespace std;
typedef vector <int> VEC_INT;
int inp[2][2] = {{1, 1}, {2, 0}};
// 瑕佹斁鍏ユā鏉夸腑鐨?x2鐨勬鍒欐暟緇?br>
int main(int argc, char* argv[])
{
int i, j;
vector <VEC_INT> vecvec;
// 濡傛灉浣犳兂鐢ㄤ竴鍙ヨ瘽瀹炵幇榪欐牱鐨勫祵濂楋紝浣犲彲浠ヨ繖鏍峰啓錛?br> // vector <vector <int> > vecvec;
// 灝嗘暟緇勫~鍏ュ悜閲?br> VEC_INT v0(inp[0], inp[0]+2);
// 浼犻掍袱涓寚閽?br> // 灝嗘暟緇勪腑鐨勫兼嫹璐濆埌鍚戦噺涓?br> VEC_INT v1(inp[1], inp[1]+2);
vecvec.push_back(v0);
vecvec.push_back(v1);
for (i=0; i<2; i++)
{
for (j=0; j<2; j++)
{
cout << vecvec[i][j] << " ";
}
cout << endl;
}
return 0;
}
// 杈撳嚭錛?br>// 1 1
// 2 0
铏界劧鍦ㄥ垵濮嬪寲鏃跺緢楹葷儲錛屼竴鏃︿綘灝嗘暟鎹~濡傚悜閲忎腑錛屼綘灝卞疄鐜頒簡涓涓彉闀跨殑鍙墿鍏呯殑浜岀淮鏁扮粍錛堝ぇ灝忓彲鎵╁厖鐩村埌浣跨敤瀹屽唴瀛橈級銆傛牴鎹疄闄呴渶瑕侊紝鍙互浣跨敤鍚勭瀹瑰櫒鐨勫祵濂楃粍鍚堛?br>
鎬葷粨
STL鏄湁鐢ㄧ殑錛屼絾鏄嬌鐢ㄨ繃紼嬩腑鐨勫洶闅懼拰楹葷儲鏄啀鎵闅懼厤鐨勩傚氨鍍忎腑鍥戒漢鎵璇寸殑錛?#8220;濡傛灉浣犳帉鎻′簡瀹冿紝渚跨姽濡傝檸娣葷考銆?#8221;
鐢變簬CSDN鐨勬枃绔犵紪杈戝櫒鍙兘灝?<"鍜?>"涔嬮棿鐨勯儴鍒嗕綔涓篽tml鏍囩榪囨護鎺変簡錛岀幇璐村嚭姝g‘鐨?#8220;嫻嬭瘯鍒嗘暟緇熻”紼嬪簭濡備笅錛?
//紼嬪簭錛氭祴璇曞垎鏁扮粺璁?
//鐩殑錛氶氳繃瀵瑰悜閲忎腑淇濆瓨鐨勫垎鏁扮殑鎿嶄綔璇存槑鎬庢牱浣跨敤綆楁硶
#include <algorithm> //濡傛灉瑕佷嬌鐢ㄧ畻娉曞嚱鏁幫紝浣犲繀欏昏鍖呭惈榪欎釜澶存枃浠躲?
#include <numeric> // 鍖呭惈accumulate錛堟眰鍜岋級鍑芥暟鐨勫ご鏂囦歡
#include <vector>
#include <iostream>
using namespace std;
int testscore[] = {67, 56, 24, 78, 99, 87, 56};
//鍒ゆ柇涓涓垚緇╂槸鍚﹂氳繃浜嗚冭瘯
bool passed_test(int n)
{
return (n >= 60);
}
// 鍒ゆ柇涓涓垚緇╂槸鍚︿笉鍙婃牸
bool failed_test(int n)
{
return (n < 60);
}
int main(int argc, char* argv[])
{
int total;
// 鍒濆鍖栧悜閲忥紝浣夸箣鑳藉瑁呭叆testscore鏁扮粍涓殑鍏冪礌
vector <int> vecTestScore(testscore,
testscore + sizeof(testscore) / sizeof(int));
vector <int>::iterator vi;
// 鎺掑簭騫舵樉紺哄悜閲忎腑鐨勬暟鎹?
sort(vecTestScore.begin(), vecTestScore.end());
cout << "Sorted Test Scores:" << endl;
for (vi=vecTestScore.begin(); vi != vecTestScore.end(); vi++)
{ cout << *vi << ", "; }
cout << endl;
// 鏄劇ず緇熻淇℃伅
// min_element 榪斿洖涓涓?_iterator_ 綾誨瀷鐨勫璞★紝璇ュ璞℃寚鍚戝兼渶灝忕殑閭d釜鍏冪礌銆?
//“*”榪愮畻絎︽彁鍙栧厓绱犱腑鐨勫箋?
vi = min_element(vecTestScore.begin(), vecTestScore.end());
cout << "The lowest score was " << *vi << "." << endl;
//涓巑in_element綾諱技錛宮ax_element鏄夊嚭鏈澶у箋?
vi = max_element(vecTestScore.begin(), vecTestScore.end());
cout << "The highest score was " << *vi << "." << endl;
// 浣跨敤澹版槑鍑芥暟錛坧redicate function錛屾寚vecTestScore.begin()鍜寁ecTestScore.end()錛夋潵紜畾閫氳繃鑰冭瘯鐨勪漢鏁般?
cout << count_if(vecTestScore.begin(), vecTestScore.end(), passed_test) <<
" out of " << vecTestScore.size() <<
" students passed the test" << endl;
// 紜畾鏈夊灝戜漢鑰冭瘯鎸備簡
cout << count_if(vecTestScore.begin(),
vecTestScore.end(), failed_test) <<
" out of " << vecTestScore.size() <<
" students failed the test" << endl;
//璁$畻鎴愮嘩鎬誨拰
total = accumulate(vecTestScore.begin(),
vecTestScore.end(), 0);
// 璁$畻鏄劇ず騫沖潎鎴愮嘩
cout << "Average score was " <<
(total / (int)(vecTestScore.size())) << endl;
return 0;
}
CCuteFTPView
|
|
CView2
|
CView3
|
CView4
|
鍒涘緩姝ラ錛?
鈻?鍦ㄥ垱寤轟箣鍓嶆垜浠繀欏誨厛鐢ˋppWizard鐢熸垚鍗曟枃妗uteFTP錛岀敓鎴愮殑瑙嗙被涓?CCuteFTPView.鍚屾椂鍦ㄥ鍔犱笁涓綾繪垨鑰呬粠瑙嗙被緇ф壙鑰屾潵鐨勬淳鐢熺被CView2,CView3 CView4.
鈻?澧炲姞鎴愬憳錛?/strong>
鍦–mainfrm.h涓垜浠皢澧炲姞涓嬮潰鐨勪唬鐮侊細
CSplitterWnd wndSplitter1;
CSplitterWnd wndSplitter2;
鈻?閲嶈澆CMainFrame::OnCreateClient()鍑芥暟錛?/strong>
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{ //鍒涘緩涓涓潤鎬佸垎鏍忕獥鍙o紝鍒嗕負涓夎涓鍒?
if(m_wndSplitter1.CreateStatic(this,3,1)==NULL)
return FALSE;
//灝咰CuteFTPView榪炴帴鍒?琛?鍒楃獥鏍間笂
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100), pContext);
m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext); //灝咰View4榪炴帴鍒?琛?鍒?br> if(m_wndSplitter2.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE, m_wndSplitter.IdFromRowCol(1, 0))==NULL)
return FALSE; //灝嗙1琛?鍒楀啀鍒嗗紑1琛?鍒?
//灝咰View2綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒?br> m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext); //灝咰View3綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒?br> m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext);
return TRUE;
}
2.3瀹炵幇鍚勪釜鍒嗗壊鍖哄煙鐨勯氫俊
鈻?strong>鏈夋枃妗g浉榪炵殑瑙嗗浘涔嬮棿鐨勯氫俊
鐢盇ppWizard鐢熸垚鐨凜CuteFTPView鏄笌鏂囨。鐩歌繛鐨勶紝鍚屾椂鎴戜滑涔熻CView2涓庢枃妗g浉榪烇紝鍥犳鎴戜滑闇瑕佷慨鏀笴CuteFTPApp鐨処nitInstance()鍑芥暟錛屾垜浠皢澧炲姞涓嬮潰鐨勯儴鍒嗐?br>AddDocTemplate (new CMultiDocTemplate(IDR_VIEW2TYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CMDIChildWnd),
RUNTIME_CLASS(CView2)));
鎴戜滑鐜板湪鏉ュ疄鐜癈CuteFTPView涓嶤View2涔嬮棿鐨勯氫俊銆傜敱浜庤窡鏂囨。綾葷浉榪炵殑瑙嗗浘綾?鏄笉鑳藉畨鍏ㄧ殑涓庨櫎鏂囨。綾諱箣澶栫殑鍏朵綑鐨勮鍥劇被閫氫俊鐨勩傚洜姝ゆ垜浠彧鑳借浠栦滑閮戒笌鏂囨。 綾婚氫俊銆傚湪鏂囨。涓垜浠緗浉搴旂殑鎸囬拡浠ョ敤鏉ヨ幏鐨勫悇涓鍥俱傛垜浠噸杞?CCuteFTPView::OnOpenDocument()鍑芥暟錛?
CCuteFTPView* pCuteFTPView;
CView2* pView2;
POSITION pos;
CView* pView;
while(pos!=NULL)
{
pView=GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL)
pCuteFTPView=(CCuteFTPView*)pView;
else(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL)
pView2=(CView2*)pView;
}
榪欐牱鎴戜滑鍦ㄦ枃妗g被涓氨鑾風殑浜嗚窡瀹冪浉榪炵殑鎵鏈夌殑瑙嗗浘鐨勬寚閽堛?br>濡傛灉闇瑕佸湪 CCuteFTPView涓皟鐢–View2涓殑涓涓柟娉旸oIt()鍒欎唬鐮佸涓嬶細
CCuteFTPDoc* pDoc=GetDocument();
CView2* pView2=pDoc->pView3;
pView3.DoIt();
鈻?strong>鏃犳枃妗h鍥句笌鏂囨。鍏寵仈瑙嗗浘涔嬮棿鐨勯氫俊
CView3鍜孋View4閮芥槸涓嶄笌鏂囨。鐩稿叧鑱旂殑銆傛垜浠幇鍦ㄥ疄鐜癈View3涓嶤View2鐨勯氫俊.姝e鍓嶉潰鎵璇達紝CView2鍙兘瀹夊叏鐨勪笌CCuteFTPDoc閫氫俊錛屽洜姝わ紝CView3濡傛灉闇瑕佽窡CView2閫氫俊錛屼篃蹇呴』鍊熷姪浜庢枃妗g被銆傚洜姝ょ▼搴忕殑鍏抽敭鏄浣曞湪CView3涓幏寰楁枃妗g殑鎸囬拡銆傝鍥劇被涓病鏈夎繖鏍風殑綾繪垚鍛樺彲浠ョ敤鏉ョ洿鎺ヨ闂枃妗g被銆備絾鏄垜浠煡閬撳湪涓葷獥鍙g被MainFrame涓垜浠彲浠ヨ幏寰楃▼搴忕殑浠繪剰紿楀彛綾葷殑鎸囬拡銆傚洜姝ゆ垜浠彧瑕佽幏寰楃▼搴忎富紿楀彛浜嗙殑鎸囬拡錛屽氨鍙互瑙e喅闂浜嗐備唬鐮佸疄鐜板湪CView3涓闂瓹View2涓殑DoIt()鏂規硶銆?br>
CView3涓殑浠g爜濡備笅錛?
CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent();
CCuteFTPDoc* Doc=(CCuteFTPDoc*)MainFrame->GetActiveDocument();
if(Doc!=NULL) Doc->DoIt();
CCuteFTPDoc涓殑鐩稿簲鐨勫鐞嗗嚱鏁癉oIt()浠g爜濡備笅錛?
CView2* pView2;
POSITION pos;
CView* pView;
while(pos!=NULL)
{
pView=GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CView2))==NULL)
pView2=(CView2*)pView;
}
pView2->DoIt();
鈻?strong>鏃犳枃妗e叧鑱旇鍥句箣闂寸殑閫氫俊
浠ヤ笅鐢ㄤ竴涓嚜鍒涚殑瀵硅瘽妗嗙被(MyMessageDlg)鍚戣鍥劇被(MessageTestView)
鍙戦佽嚜瀹氫箟娑堟伅涓轟緥錛岃鏄庤繖涓ょ涓嶅悓鏂規硶鐨勮嚜瀹氫箟娑堟伅鐨?/span>
娑堟伅浼犻掔殑鏂規硶涓錛氫嬌鐢∣N_MESSAGE
浣跨敤ON_MESSAGE鍝嶅簲娑堟伅錛屽繀欏婚厤鍚堝畾涔夋秷鎭?define WM_MY_MESSAGE (WM_USER+100)
瀵逛簬鍙戦佹秷鎭?/span>-MyMessageDlg錛?br>鍦ㄥ叾MyMessageDlg.h涓紝瀹氫箟#define WM_MY_MESSAGE (WM_USER+100)
鍦ㄥ叾MyMessageDlg.cpp涓鍏堟坊鍔狅細錛僫 nclude "MainFrm.h"
鍥犱負浣跨敤浜咰MainFrame*瀹氫箟瀵硅薄銆?br>騫朵笖瑕佹湁嫻嬭瘯娑堟伅鐨勫嚱鏁幫細
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //鍏堥氳繃鑾峰彇褰撳墠妗嗘灦鎸囬拡
CView * active = pMF->GetActiveView();//鎵嶈兘鑾峰彇褰撳墠瑙嗙被鎸囬拡
if(active != NULL) //鑾峰彇浜嗗綋鍓嶈綾繪寚閽堟墠鑳藉彂閫佹秷鎭?br> active->PostMessage(WM_MY_MESSAGE,0,0); //浣跨敤PostMessage鍙戦佹秷鎭?br>}
瀵逛簬娑堟伅鐨勬帴鍙楄?/span>-MessageTestView錛?br>鍦ㄥ叾MessageTestView.h涓紝涔熻瀹氫箟#define WM_MY_MESSAGE (WM_USER+100)
騫跺畾涔夋秷鎭槧灝勫嚱鏁?OnMyMessage()
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
鍦ㄥ叾MessageTestView.cpp涓紝
鍏堣澹版槑鍝嶅簲娑堟伅錛?br>BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
鍐嶆坊鍔犳秷鎭搷搴旂殑鍑芥暟瀹炵幇錛?br>LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
娑堟伅浼犻掔殑鏂規硶浜岋細浣跨敤ON_REGISTERED_MESSAGE
浣跨敤ON_REGISTERED_MESSAGE娉ㄥ唽娑堟伅錛屽繀欏婚厤鍚?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
瀵逛簬娑堟伅鐨勫彂閫佽?/span>-MyMessageDlg錛?br>鍦ㄥ叾MyMessageDlg.h涓紝鍙
瀹氫箟static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
灝卞彲浠ヤ簡銆?br>鍦ㄥ叾MyMessageDlg.cpp涓鍏堟坊鍔狅細錛僫 nclude "MainFrm.h"
鍥犱負浣跨敤浜咰MainFrame*瀹氫箟瀵硅薄銆?br>騫朵笖瑕佹湁嫻嬭瘯娑堟伅鐨勫嚱鏁幫細
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //鍏堥氳繃鑾峰彇褰撳墠妗嗘灦鎸囬拡
CView * active = pMF->GetActiveView();//鎵嶈兘鑾峰彇褰撳墠瑙嗙被鎸囬拡
if(active != NULL) //鑾峰彇浜嗗綋鍓嶈綾繪寚閽堟墠鑳藉彂閫佹秷鎭?br> active->PostMessage(WM_MY_MESSAGE,0,0); //浣跨敤PostMessage鍙戦佹秷鎭?br>}
瀵逛簬娑堟伅鐨勬帴鏀惰?/span>-MessageTestView錛?br>鍦ㄥ叾MessageTestView.h涓笉瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); ------------------------------------------------------------------- 鍏朵粬娉ㄦ剰浜嬮」錛?/p>
鍙戦佹秷鎭殑-MyMessageDlg.cpp鍓嶄篃瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); 鎺ュ彈娑堟伅鐨?MessageTestView.cpp鍓嶄篃瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); RegisterWindowMessage("Message")涓?"鐨勫唴瀹規槸浠涔堜笉閲嶈錛屽啓浠涔堥兘鍙互錛屼絾鏄?br>鍙戦佽呬笌鎺ュ彈鑰呭繀欏繪槸涓鏍風殑鍐呭錛屼緥濡傦細"Message"
搴旇鎶婅繖涓畾涔夋斁鍒癕essageTestView.cpp涓紝瑕佷笉浼氬嚭鐜? redefinition
鍦ㄥ叾MessageTestView.h涓彧瑕佸畾涔夋秷鎭槧灝勫嚱鏁?br>protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
鍦ㄥ叾MessageTestView.cpp涓?鍏堝畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
鎺ョ潃娉ㄥ唽娑堟伅錛?br>BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
鏈鍚庢坊鍔犳秷鎭搷搴旂殑鍑芥暟瀹炵幇錛?br>LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
----------------------------------------------------------------
姣旇緝涓ょ鏂規硶錛屽彧鏄暐鏈変笉鍚屻備絾涔熻灝忓績璋ㄦ厧錛屼互鍏嶅嚭鐜版帴鏀朵笉鍒版秷鎭殑鎯呭喌銆?/p>
]]>