锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍒濊瘑STL錛氳В絳斾竴浜涚枒闂?nbsp;
1.1 涓涓渶鍏沖績鐨勯棶棰橈細浠涔堟槸STL
"浠涔堟槸STL錛?錛屽亣濡備綘瀵筍TL榪樼煡涔嬬敋灝戯紝閭d箞鎴戞兂錛屼綘涓瀹氬緢鎯崇煡閬撹繖涓棶棰樼殑絳旀錛屽潶鐜囧湴璁詫紝瑕佹寚鏈涚敤鐭煭鏁拌█灝嗚繖涓棶棰橀槓榪版竻妤氾紝涔熷喅闈炴槗浜嬨傚洜姝わ紝濡傛灉浣犲湪鐪嬪畬鏈妭涔嬪悗榪樻槸瑙夊緱浼兼噦闈炴噦錛屽ぇ鍙笉蹇呯潃鎬ワ紝鍦ㄩ槄璇諱簡鍚庣畫鍐呭涔嬪悗錛岀浉淇′綘瀵筍TL鐨勮璇嗭紝灝嗕細鎰堝姞娓呮櫚銆佸噯紜拰瀹屾暣銆備笉榪囷紝涓婅堪榪欑暘璇濆惉璧鋒潵鏄惁鏈夌偣鍍忔槸鍦ㄤ負鑷繁緋熺硶鐨勮〃杈捐兘鍔涘紑鑴辯姜璐e憿錛?錛?nbsp;
涓嶇煡閬撲綘鏄惁鏈夎繃榪欐牱鐨勭粡鍘嗐傚湪浣犲噯澶囩潃鎵嬪畬鎴愭暟鎹粨鏋勮佸笀鎵甯冪疆鐨勫搴綔涓氭椂錛屾垨鑰呭湪浣犱負浣犳墍璐熻矗鐨勬煇涓蔣浠墮」鐩腑娣誨姞涓欏規柊鍔熻兘鏃訛紝浣犲彂鐜伴渶瑕佺敤鍒頒竴涓摼琛?List)鎴栬呮槸鏄犲皠琛紙Map錛変箣綾葷殑涓滆タ錛屼絾鏄墜澶村茍娌℃湁鐜版垚鐨勪唬鐮併備簬鏄湪浣犲紑濮嬫寮忚冭檻紼嬪簭鍔熻兘涔嬪墠錛屾墜宸ュ疄鐜癓ist鎴栬匨ap鏄笉鍙伩鍏嶇殑銆備簬鏄?#8230;…錛屾渶緇堜綘欏哄埄瀹屾垚浜嗕換鍔°傛垨璁告鏃訛紝浣滀負涓涓叿鏈夎緝楂樼礌鍏葷殑紼嬪簭鍛樼殑浣犺繕涓嶈偗緗紤錛堟垨鑰呮槸涓涓枩嬈㈠伔鎳掔殑浼樼瓑鐢?錛夛紝鍥犱負浣犱細鎯沖埌錛屽鏋滀互鍚庤繕閬囧埌榪欐牱鐨勬儏鍐墊庝箞鍔烇紵娌℃湁蹇呰鍐嶅仛涓閬嶅悓鏍風殑浜嬫儏鍚э紒
濡傛灉璇翠笂榪拌繖縐嶆儏褰㈡瘡澶╅兘鍦ㄥ彂鐢燂紝鎴栬鏈夌偣澶稿紶銆備絾鏄紝濡傛灉璇存暣涓蔣浠墮鍩熼噷錛屾暟鍗佸勾鏉ョ‘瀹為兘鍦ㄤ負浜嗕竴涓洰鏍囪屽鏂?-鍙鐢ㄦэ紙reusability錛夛紝榪欑湅璧鋒潵浼間箮騫朵笉澶稿紶銆備粠鏈鏃╃殑闈㈠悜榪囩▼鐨勫嚱鏁板簱錛屽埌闈㈠悜瀵硅薄鐨勭▼搴忚璁℃濇兂錛屽埌鍚勭緇勪歡鎶鏈紙濡傦細COM銆丒JB錛夛紝鍒拌璁℃ā寮忥紙design pattern錛夌瓑絳夈傝孲TL涔熷湪鍋氱潃綾諱技鐨勪簨鎯咃紝鍚屾椂鍦ㄥ畠鑳屽悗钑存兜鐫涓縐嶆柊鐨勭▼搴忚璁℃濇兂--娉涘瀷鍖栬璁★紙generic programming錛夈?nbsp;
緇х畫涓婇潰鎻愬埌鐨勯偅涓緥瀛愶紝鍋囧浣犳妸List鎴栬卪ap瀹屽ソ鐨勪繚鐣欎簡涓嬫潵錛屾鍦ㄦ殫鑷緱鎰忋備笖鎱紝濡傛灉涓嬩竴鍥炵殑List閲屾斁鐨勪笉鏄誕鐐規暟鑰屾槸鏁存暟鍛紵濡傛灉浣犳墍瀹炵幇鐨凪ap鍦ㄦ晥鐜囦笂鎬繪槸浠や綘涓嶅お婊℃剰騫朵笖鏈夋椂榪樹細鍑轟簺bug鍛紵浣犺濡備綍闈㈠榪欎簺闂錛熶嬌鐢⊿TL鏄竴涓笉閿欑殑閫夋嫨錛岀‘瀹炲姝わ紝STL鍙互婕備寒鍦拌В鍐充笂闈㈡彁鍒扮殑榪欎簺闂錛屽敖綆′綘榪樺彲浠ュ姹傚叾浠栨柟娉曘?nbsp;
璇翠簡鍗婂ぉ錛屽埌搴昐TL鏄粈涔堜笢瑗垮憿錛?nbsp;
STL錛圫tandard Template Library錛夛紝鍗蟲爣鍑嗘ā鏉垮簱錛屾槸涓涓叿鏈夊伐涓氬己搴︾殑錛岄珮鏁堢殑C++紼嬪簭搴撱傚畠琚綰充簬C++鏍囧噯紼嬪簭搴擄紙C++ Standard Library錛変腑錛屾槸ANSI/ISO C++鏍囧噯涓渶鏂扮殑涔熸槸鏋佸叿闈╁懡鎬х殑涓閮ㄥ垎銆傝搴撳寘鍚簡璇稿鍦ㄨ綆楁満縐戝棰嗗煙閲屾墍甯哥敤鐨勫熀鏈暟鎹粨鏋勫拰鍩烘湰綆楁硶銆備負騫垮ぇC++紼嬪簭鍛樹滑鎻愪緵浜嗕竴涓彲鎵╁睍鐨勫簲鐢ㄦ鏋訛紝楂樺害浣撶幇浜嗚蔣浠剁殑鍙鐢ㄦс傝繖縐嶇幇璞℃湁浜涚被浼間簬Microsoft Visual C++涓殑MFC錛圡icrosoft Foundation Class Library錛夛紝鎴栬呮槸Borland C++ Builder涓殑VCL(Visual Component Library)錛屽浜庢浜岃咃紝澶у涓瀹氫笉浼氶檶鐢熷惂銆?nbsp;
浠庨昏緫灞傛鏉ョ湅錛屽湪STL涓綋鐜頒簡娉涘瀷鍖栫▼搴忚璁$殑鎬濇兂錛坓eneric programming錛夛紝寮曞叆浜嗚澶氭柊鐨勫悕璇嶏紝姣斿鍍忛渶姹傦紙requirements錛夛紝姒傚康錛坈oncept錛夛紝妯″瀷錛坢odel錛夛紝瀹瑰櫒錛坈ontainer錛夛紝綆楁硶錛坅lgorithmn錛夛紝榪唬瀛愶紙iterator錛夌瓑銆備笌OOP錛坥bject-oriented programming錛変腑鐨勫鎬侊紙polymorphism錛変竴鏍鳳紝娉涘瀷涔熸槸涓縐嶈蔣浠剁殑澶嶇敤鎶鏈?nbsp;
浠庡疄鐜板眰嬈$湅錛屾暣涓猄TL鏄互涓縐嶇被鍨嬪弬鏁板寲錛坱ype parameterized錛夌殑鏂瑰紡瀹炵幇鐨勶紝榪欑鏂瑰紡鍩轟簬涓涓湪鏃╁厛C++鏍囧噯涓病鏈夊嚭鐜扮殑璇█鐗規?-妯℃澘錛坱emplate錛夈傚鏋滄煡闃呬換浣曚竴涓増鏈殑STL婧愪唬鐮侊紝浣犲氨浼氬彂鐜幫紝妯℃澘浣滀負鏋勬垚鏁翠釜STL鐨勫熀鐭蟲槸涓浠跺崈鐪熶竾紜殑浜嬫儏銆傞櫎姝や箣澶栵紝榪樻湁璁稿C++鐨勬柊鐗規т負STL鐨勫疄鐜版彁渚涗簡鏂逛究銆?nbsp;
涓嶇煡浣犲榪欓噷涓涓嬪瓙鍐掑嚭榪欎箞澶氭湳璇仛浣曟劅鎯籌紝甯屾湜涓嶄細鍙︿綘涓嶆剦蹇傚亣濡備綘瀵瑰畠浠箣涓殑澶у鏁頒笉鐢氫簡瑙o紝鏁鏀懼績錛屽湪鍚庣畫鍐呭涓皢浼氬榪欎簺鍚嶈瘝閫愪竴璁鴻堪銆傛濡傚紑澶存墍鎻愬埌鐨勩?nbsp;
鏈夎叮鐨勬槸錛屽浜嶴TL榪樻湁鍙﹀涓縐嶈В閲?-STepanov %26amp; Lee錛屽墠鑰呮槸鎸嘇lexander Stepanov錛孲TL鐨勫垱濮嬩漢錛涜屽悗鑰呮槸Meng Lee錛屽ス涔熸槸浣縎TL寰椾互鎺ㄨ鐨勫姛鑷o紝絎竴涓猄TL鎴愬搧灝辨槸浠栦滑鍚堜綔瀹屾垚鐨勩傝繖涓鎻愭硶婧愯嚜1995騫?鏈堬紝Dr.Dobb’s Journal鐗圭害璁拌? 钁楀悕鎶鏈功綾嶄綔瀹禔l Stevens瀵笰lexander Stepanov鐨勪竴綃囦笓璁褲?nbsp;
1.2 榪芥牴婧簮錛歋TL鐨勫巻鍙?nbsp;
鍦ㄧ粨璇嗘柊鏈嬪弸鐨勬椂鍊欙紝澶у鏁頒漢鎬繪槸蹇嶄笉浣忔兂浜嗚В瀵規柟鐨勮繃鍘匯傛湰鑺傚皢甯︽偍綆鍗曞洖欏句竴涓婼TL鐨勮繃鍘匯?nbsp;
琚獕涓篠TL涔嬬埗鐨凙lexander Stepanov錛屽嚭鐢熶簬鑻忚仈鑾柉縐戯紝鏃╁湪20涓栫邯70騫翠唬鍚庡崐鏈燂紝浠栦究宸茬粡寮濮嬭冭檻錛屽湪淇濊瘉鏁堢巼鐨勫墠鎻愪笅錛屽皢綆楁硶浠庤澶氬叿浣撳簲鐢ㄤ箣涓娊璞″嚭鏉ョ殑鍙兘鎬э紝榪欎究鏄悗鏉ユ硾鍨嬪寲鎬濇兂鐨勯洀褰€備負浜嗛獙璇佽嚜宸辯殑鎬濇兂錛屼粬鍜岀航綰﹀窞绔嬪ぇ瀛︽暀鎺圖eepak Kapur錛屼雞濉為噷灝旀妧鏈闄㈡暀鎺圖avid Musser鍏卞悓寮鍙戜簡涓縐嶅彨鍋歍ecton鐨勮璦銆傚敖綆¤繖嬈″皾璇曟渶緇堟病鏈夊彇寰楀疄鐢ㄦх殑鎴愭灉錛屼絾鍗寸粰浜哠tepanov寰堝ぇ鐨勫惎紺恒?nbsp;
鍦ㄩ殢鍚庣殑鍑犲勾涓紝浠栧張鍜孌avid Musser絳変漢鍏堝悗鐢⊿chema璇█錛堜竴縐峀isp璇█鐨勫彉縐嶏級鍜孉da璇█寤虹珛浜嗕竴浜涘ぇ鍨嬬▼搴忓簱銆傝繖鍏墮棿錛孉lexander Stepanov寮濮嬫剰璇嗗埌錛屽湪褰撴椂鐨勯潰鍚戝璞$▼搴忚璁℃濇兂涓墍瀛樺湪鐨勪竴浜涢棶棰橈紝姣斿鎶借薄鏁版嵁綾誨瀷姒傚康鎵瀛樺湪鐨勭己闄楓係tepanov甯屾湜閫氳繃瀵硅蔣浠墮鍩熶腑鍚勭粍鎴愰儴鍒嗙殑鍒嗙被錛岄愭笎褰㈡垚涓縐嶈蔣浠惰璁$殑姒傚康鎬ф鏋躲?nbsp;
1987騫村乏鍙籌紝鍦ㄨ礉灝斿疄楠屽宸ヤ綔鐨凙lexander Stepanov寮濮嬮嬈¢噰鐢–++璇█榪涜娉涘瀷杞歡搴撶殑鐮旂┒銆備絾閬楁喚鐨勬槸錛屽綋鏃剁殑C++璇█榪樻病鏈夊紩鍏ユā鏉匡紙template錛夌殑璇硶錛岀幇鍦ㄦ垜浠彲浠ユ竻妤氱殑鐪嬪埌錛屾ā鏉挎蹇典箣浜嶴TL瀹炵幇錛屾槸浣曠瓑閲嶈銆傛槸鏃朵嬌鐒訛紝閲囩敤緇ф壙鏈哄埗鏄埆鏃犻夋嫨鐨勩傚敖綆″姝わ紝Stepanov榪樻槸寮鍙戝嚭浜嗕竴涓簽澶х殑綆楁硶搴撱備笌姝ゅ悓鏃訛紝鍦ㄤ笌Andrew Koenig錛堝墠ISO C++鏍囧噯鍖栧鍛樹細涓誨腑錛夊拰Bjarne Stroustrup錛圕++璇█鐨勫垱濮嬩漢錛夌瓑欏剁駭澶у笀浠殑鍏變簨榪囩▼涓紝Stepanov寮濮嬫敞鎰忓埌C/C++璇█鍦ㄥ疄鐜板叾娉涘瀷鎬濇兂鏂歸潰鎵鍏鋒湁鐨勬綔鍦ㄤ紭鍔褲傚氨鎷緾/C++涓殑鎸囬拡鑰岃█錛屽畠鐨勭伒媧諱笌楂樻晥榪愮敤錛屼嬌鍚庢潵鐨凷TL鍦ㄥ疄鐜版硾鍨嬪寲鐨勫悓鏃舵洿鏄繚鎸佷簡楂樻晥鐜囥傚彟澶栵紝鍦⊿TL涓崰鎹瀬鍏墮噸瑕佸湴浣嶇殑榪唬瀛愭蹇典究鏄簮鑷簬C/C++涓師鐢熸寚閽堬紙 native pointer錛夌殑鎶借薄銆?nbsp;
1988騫達紝Alexander Stepanov寮濮嬭繘鍏ユ儬鏅殑Palo Alto瀹為獙瀹ゅ伐浣滐紝鍦ㄩ殢鍚庣殑4騫翠腑錛屼粬浠庝簨鐨勬槸鏈夊叧紓佺洏椹卞姩鍣ㄦ柟闈㈢殑宸ヤ綔銆傜洿鍒?992騫達紝鐢變簬鍙傚姞騫朵富鎸佷簡瀹為獙瀹や富浠籅ill Worley鎵寤虹珛鐨勪竴涓湁鍏崇畻娉曠殑鐮旂┒欏圭洰錛屾墠浣夸粬閲嶆柊鍥炲埌浜嗘硾鍨嬪寲綆楁硶鐨勭爺絀跺伐浣滀笂鏉ャ傞」鐩嚜寤虹珛涔嬪悗錛屽弬涓庤呬粠鏈鍒濈殑8浜洪愭笎鍑忓皯錛屾渶鍚庡彧鍓╀笅涓や釜浜?-Stepanove鏈漢鍜孧eng Lee銆傜粡榪囬暱鏃墮棿鐨勫姫鍔涳紝鏈緇堬紝淇″康涓庢睏姘存墍鎹㈡潵鐨勬槸涓涓寘鍚湁澶ч噺鏁版嵁緇撴瀯鍜岀畻娉曢儴浠剁殑搴炲ぇ榪愯搴撱傝繖渚挎槸鐜板湪鐨凷TL鐨勯洀褰紙鍚屾椂涔熸槸STL鐨勪竴涓疄鐜扮増鏈?-HP STL錛夈?nbsp;
1993騫達紝褰撴椂鍦ㄨ礉灝斿疄楠屽鐨凙ndrew Koenig鐪嬪埌浜哠tepanove鐨勭爺絀舵垚鏋滐紝寰堟槸鍏村銆傚湪浠栫殑榧撳姳涓庡府鍔╀笅錛孲tepanove浜庢槸騫?鏈堢殑鍦d綍濉炰負ANSI/ISO C++鏍囧噯濮斿憳浼氬仛浜嗕竴涓浉鍏蟲紨璁詫紙棰樹負"The Science of C++ Programming"錛夛紝鍚戝鍛樹滑璁茶堪浜嗗叾瑙傚康銆傜劧鍚庡張浜庢騫?鏈堬紝鍦ㄥ湥榪垐浼氳涓婏紝鍚戝鍛樹細鎻愪氦浜嗕竴浠藉緩璁功錛屼互鏈熶嬌STL鎴愪負C++鏍囧噯搴撶殑涓閮ㄥ垎銆傚敖綆¤繖涓寤鴻鍗佸垎搴炲ぇ錛屼互鑷充簬闄嶄綆浜嗚閫氳繃鐨勫彲鑳芥э紝浣嗙敱浜庡叾鎵鍖呭惈鐨勬柊鎬濇兂錛屾姇紲ㄧ粨鏋滀互鍘嬪掑鏁扮殑鎰忚璁や負鎺ㄨ繜瀵硅寤鴻鐨勫喅瀹氥?nbsp;
闅忓悗錛屽湪浼椾漢鐨勫府鍔╀箣涓嬶紝鍖呮嫭Bjarne Stroustrup鍦ㄥ唴錛孲tepanove鍙堝STL榪涜浜嗘敼榪涖傚悓鏃跺姞鍏ヤ簡涓涓皝瑁呭唴瀛樻ā寮忎俊鎭殑鎶借薄妯″潡錛屼篃灝辨槸鐜板湪STL涓殑allocator錛屽畠浣縎TL鐨勫ぇ閮ㄥ垎瀹炵幇閮藉彲浠ョ嫭绔嬩簬鍏蜂綋鐨勫唴瀛樻ā寮忥紝浠庤岀嫭绔嬩簬鍏蜂綋騫沖彴銆傚湪鍚屽勾澶忓鐨勬粦閾佸崲浼氳涓婏紝濮斿憳浠互80%璧炴垚錛?0%鍙嶅錛屾渶緇堥氳繃浜嗘彁妗堬紝鍐沖畾灝哠TL姝e紡綰沖叆C++鏍囧噯鍖栬繘紼嬩箣涓紝闅忓悗STL渚胯鏀捐繘浜嗕細璁殑宸ヤ綔鏂囦歡涓傝嚜姝わ紝STL緇堜簬鎴愪負浜咰++瀹舵棌涓殑閲嶈涓鍛樸?nbsp;
姝ゅ悗錛岄殢鐫C++鏍囧噯鐨勪笉鏂敼榪涳紝STL涔熷湪涓嶆柇鍦頒綔鐫鐩稿簲鐨勬紨鍖栥傜洿鑷?998騫達紝ANSI/ISO C++鏍囧噯姝e紡瀹氭錛孲TL濮嬬粓鏄疌++鏍囧噯涓笉鍙垨緙虹殑涓澶ч儴浠躲?/font>
涓.浠涔堟椂鍊欑敤STL
濡傛灉錛屾湁鐨勬椂鍊欙紝浣犺鍦ㄧ▼搴忎腑鐢ㄥ埌鍫嗐佹爤銆侀槦鍒椼侀摼琛?/font>絳変竴浜涘熀鏈殑綆楁硶錛岃屼綘鍙堝疄鍦ㄤ笉鎯寵嚜宸卞幓瀹炵幇鏁版嵁緇撴瀯鏁欑涔︿腑閭d簺綣佺悙鐨勭畻娉曪紝閭d箞浣犲氨鍙互鑰冭檻浣跨敤STL銆?/p>
鍙﹀錛?font color=#0000ff>STL浣滀負涓縐嶆爣鍑嗭紝渚夸簬浜ゆ祦
浜?浠涔堟槸STL
鍏ㄧО涓?nbsp; Standard Template Library 錛屽嵆鏍囧噯妯℃澘搴?/font>
瑕佷嬌鐢⊿TL錛岃浜嗚В浠ヤ笅鍑犱釜鍩烘湰姒傚康錛?/p>
瀹瑰櫒錛?/font>鍙互鎶婂畠鐞嗚В涓哄瓨鏀炬暟鎹殑鍦版柟錛屽父鐢ㄧ殑涓浜涘鍣ㄦ湁 閾捐〃(list) 鏍?stack) 鍔ㄦ佹暟緇?nbsp;(vector) 鍙岀闃熷垪(deque) 闃熷垪(queue) 鏄犲皠(map)
娓告爣(iterator)錛?/font>鍙互鎶婂畠鐞嗚В涓烘寚閽堢被鍨嬶紝STL涓殑璁稿鍑芥暟闇瑕佺敤鍒板畠浠綔涓哄弬鏁?/p>
綆楁硶錛?/font>瀹冧滑閫氬父闇瑕佷笌瀹瑰櫒鍜屾父鏍囬厤鍚堜嬌鐢紝浣跨敤瀹冧滑錛屼綘鍙互鏂逛究鍦板瀹瑰櫒涓殑鏁版嵁榪涜鍚勭甯歌鐨勬搷浣滐紝濡傛帓搴忔搷浣滐紝瀵繪壘鏈澶у厓绱犵殑鎿嶄綔絳?br>
涓銆佸鍣ㄦā鏉跨殑浣跨敤 澶ц嚧鏈変笅闈?涓楠わ細 1.娣誨姞鐩稿簲鐨勫ご鏂囦歡(濡?font size=4> #include <list> )( 娉ㄦ剰錛屾病鏈?nbsp;.h ) 2.娣誨姞std鍛藉悕絀洪棿(鐢?nbsp;using namespace std; ) 3.璧嬩簣妯℃澘鍏蜂綋鐨勪嬌鐢ㄧ被鍨?濡?font size=4> typedef list<string> LISTSTR; ) 4.瀹炰緥鍖栨ā鏉?濡?nbsp;LISTSTR test; ) 5.瀹炰緥鍖栨父鏍?濡?nbsp;LISTSTR::iterator i; ) 6.閫氳繃榪唬鍣ㄥ璞¤闂ā鏉垮璞★紝渚嬪 // 閫愪釜杈撳嚭閾捐〃test涓殑鍏冪礌 浜屻佸鍣ㄦā鏉夸腑鐨勫父鐢ㄥ嚱鏁?/strong> assign() 璧嬪?/p>
empty() 瀹瑰櫒涓虹┖鍒欒繑鍥為潪0鍊?/p>
erase() 鍒犻櫎鎸囧畾浣嶇疆鎴栨寚瀹氳寖鍥村唴鐨勫厓绱?/p>
push_front() 浠庡鍣ㄥご閮ㄦ彃鍏ュ厓绱?nbsp; push_back() 浠庡鍣ㄥ熬閮ㄦ彃鍏ュ厓绱?/p>
pop_front() 鍒犻櫎絎竴涓厓绱?/p>
pop_back() 鍒犻櫎鏈鍚庝竴涓厓绱?/p>
back() 榪斿洖鏈鍚庝竴涓厓绱犵殑寮曠敤 front() 榪斿洖絎竴涓厓绱犵殑寮曠敤 begin() 榪斿洖鎸囧悜絎竴涓厓绱犵殑娓告爣 (涓庤凱浠e櫒閰嶅悎浣跨敤) end() 榪斿洖鎸囧悜鏈鍚庝竴涓厓绱犵殑鍚庝竴涓綅緗殑娓告爣 (鏈鍚?涓厓绱犲啀鍔?) (涓庤凱浠e櫒閰嶅悎浣跨敤)
for ( i = test.begin(); i != test.end(); ++i )
cout << *i << " ";