Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
C++ STL±à³ÌÇáËÉÈëÃÅ
 
À´Ô´£ºCSDN ·¢²¼ÓÚ£º2015-8-5
  4068  次浏览      29
 

×÷ΪC++±ê×¼²»¿ÉȱÉÙµÄÒ»²¿·Ö£¬STLÓ¦¸ÃÊÇÉøÍ¸ÔÚC++³ÌÐòµÄ½Ç½ÇÂäÂäÀïµÄ¡£STL²»ÊÇʵÑéÊÒÀïµÄ³è¶ù£¬Ò²²»ÊdzÌÐòÔ±×ÀÉϵİÚÉ裬ËýµÄ¼¤¶¯ÈËÐIJ¢·Çê¼»¨Ò»ÏÖ¡£±¾½Ì³ÌÖ¼ÔÚ´«²¥ºÍÆÕ¼°STLµÄ»ù´¡ÖªÊ¶£¬ÈôÄܽè´Ë»ú»áΪSTLµÄÍÆ¹ã×öЩÁ¦ËùÄܼ°µÄÊÂÇ飬µ½Ò²ÊǼþÈÃÈËÓä¿ìµÄÊÂÇé¡£

1 ³õʶSTL£º½â´ðһЩÒÉÎÊ

1.1 Ò»¸ö×î¹ØÐĵÄÎÊÌ⣺ʲôÊÇSTL

"ʲôÊÇSTL£¿"£¬¼ÙÈçÄã¶ÔSTL»¹ÖªÖ®ÉõÉÙ£¬ÄÇôÎÒÏ룬ÄãÒ»¶¨ºÜÏëÖªµÀÕâ¸öÎÊÌâµÄ´ð°¸£¬Ì¹Âʵؽ²£¬ÒªÖ¸ÍûÓö̶ÌÊýÑÔ½«Õâ¸öÎÊÌâ²ûÊöÇå³þ£¬Ò²¾ö·ÇÒ×Ê¡£Òò´Ë£¬Èç¹ûÄãÔÚ¿´Íê±¾½ÚÖ®ºó»¹ÊǾõµÃËÆ¶®·Ç¶®£¬´ó¿É²»±Ø×ż±£¬ÔÚÔĶÁÁ˺óÐøÄÚÈÝÖ®ºó£¬ÏàÐÅÄã¶ÔSTLµÄÈÏʶ£¬½«»áÓú¼ÓÇåÎú¡¢×¼È·ºÍÍêÕû¡£²»¹ý£¬ÉÏÊöÕâ·¬»°ÌýÆðÀ´ÊÇ·ñÓеãÏñÊÇÔÚΪ×Ô¼ºÔã¸âµÄ±í´ïÄÜÁ¦¿ªÍÑ×ïÔðÄØ£¿:£©

²»ÖªµÀÄãÊÇ·ñÓйýÕâÑùµÄ¾­Àú¡£ÔÚÄã×¼±¸×ÅÊÖÍê³ÉÊý¾Ý½á¹¹ÀÏʦËù²¼ÖõļÒÍ¥×÷ҵʱ£¬»òÕßÔÚÄãΪÄãËù¸ºÔðµÄij¸öÈí¼þÏîÄ¿ÖÐÌí¼ÓÒ»Ïîй¦ÄÜʱ£¬Äã·¢ÏÖÐèÒªÓõ½Ò»¸öÁ´±í(List)»òÕßÊÇÓ³Éä±í£¨Map£©Ö®ÀàµÄ¶«Î÷£¬µ«ÊÇÊÖÍ·²¢Ã»ÓÐÏֳɵĴúÂë¡£ÓÚÊÇÔÚÄ㿪ʼÕýʽ¿¼ÂdzÌÐò¹¦ÄÜ֮ǰ£¬ÊÖ¹¤ÊµÏÖList»òÕßMapÊDz»¿É±ÜÃâµÄ¡£ÓÚÊÇ¡­¡­£¬×îÖÕÄã˳ÀûÍê³ÉÁËÈÎÎñ¡£»òÐí´Ëʱ£¬×÷Ϊһ¸ö¾ßÓнϸßËØÑøµÄ³ÌÐòÔ±µÄÄ㻹²»¿Ï°ÕÐÝ£¨»òÕßÊÇÒ»¸öϲ»¶ÍµÀÁµÄÓŵÈÉú:£©£¬ÒòΪÄã»áÏëµ½£¬Èç¹ûÒÔºó»¹Óöµ½ÕâÑùµÄÇé¿öÔõô°ì£¿Ã»ÓбØÒªÔÙ×öÒ»±éͬÑùµÄÊÂÇé°É£¡

Èç¹û˵ÉÏÊöÕâÖÖÇéÐÎÿÌì¶¼ÔÚ·¢Éú£¬»òÐíÓеã¿äÕÅ¡£µ«ÊÇ£¬Èç¹û˵Õû¸öÈí¼þÁìÓòÀÊýÊ®ÄêÀ´È·Êµ¶¼ÔÚΪÁËÒ»¸öÄ¿±ê¶ø·Ü¶·--¿É¸´ÓÃÐÔ£¨reusability£©£¬Õâ¿´ÆðÀ´Ëƺõ²¢²»¿äÕÅ¡£´Ó×îÔçµÄÃæÏò¹ý³ÌµÄº¯Êý¿â£¬µ½ÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆË¼Ï룬µ½¸÷ÖÖ×é¼þ¼¼Êõ£¨È磺COM¡¢EJB£©£¬µ½Éè¼ÆÄ£Ê½£¨design pattern£©µÈµÈ¡£¶øSTLÒ²ÔÚ×ö×ÅÀàËÆµÄÊÂÇ飬ͬʱÔÚËü±³ºóÔ̺­×ÅÒ»ÖÖеijÌÐòÉè¼ÆË¼Ïë--·ºÐÍ»¯Éè¼Æ£¨generic programming£©¡£

¼ÌÐøÉÏÃæÌáµ½µÄÄǸöÀý×Ó£¬¼ÙÈçÄã°ÑList»òÕßmapÍêºÃµÄ±£ÁôÁËÏÂÀ´£¬ÕýÔÚ°µ×ÔµÃÒâ¡£ÇÒÂý£¬Èç¹ûÏÂÒ»»ØµÄListÀï·ÅµÄ²»ÊǸ¡µãÊý¶øÊÇÕûÊýÄØ£¿Èç¹ûÄãËùʵÏÖµÄMapÔÚЧÂÊÉÏ×ÜÊÇÁîÄ㲻̫ÂúÒâ²¢ÇÒÓÐʱ»¹»á³öЩbugÄØ£¿Äã¸ÃÈçºÎÃæ¶ÔÕâЩÎÊÌ⣿ʹÓÃSTLÊÇÒ»¸ö²»´íµÄÑ¡Ôñ£¬È·ÊµÈç´Ë£¬STL¿ÉÒÔÆ¯ÁÁµØ½â¾öÉÏÃæÌáµ½µÄÕâЩÎÊÌ⣬¾¡¹ÜÄ㻹¿ÉÒÔѰÇóÆäËû·½·¨¡£

˵Á˰ëÌ죬µ½µ×STLÊÇʲô¶«Î÷ÄØ£¿

STL£¨Standard Template Library£©£¬¼´±ê׼ģ°å¿â£¬ÊÇÒ»¸ö¾ßÓй¤ÒµÇ¿¶ÈµÄ£¬¸ßЧµÄC++³ÌÐò¿â¡£Ëü±»ÈÝÄÉÓÚC++±ê×¼³ÌÐò¿â£¨C++ Standard Library£©ÖУ¬ÊÇANSI/ISO C++±ê×¼ÖÐ×îеÄÒ²ÊǼ«¾ß¸ïÃüÐÔµÄÒ»²¿·Ö¡£¸Ã¿â°üº¬ÁËÖî¶àÔÚ¼ÆËã»ú¿ÆÑ§ÁìÓòÀïËù³£ÓõĻù±¾Êý¾Ý½á¹¹ºÍ»ù±¾Ëã·¨¡£Îª¹ã´óC++³ÌÐòÔ±ÃÇÌṩÁËÒ»¸ö¿ÉÀ©Õ¹µÄÓ¦Óÿò¼Ü£¬¸ß¶ÈÌåÏÖÁËÈí¼þµÄ¿É¸´ÓÃÐÔ¡£ÕâÖÖÏÖÏóÓÐЩÀàËÆÓÚMicrosoft Visual C++ÖеÄMFC£¨Microsoft Foundation Class Library£©£¬»òÕßÊÇBorland C++ BuilderÖеÄVCL(Visual Component Library)£¬¶ÔÓڴ˶þÕߣ¬´ó¼ÒÒ»¶¨²»»áİÉú°É¡£

´ÓÂß¼­²ã´ÎÀ´¿´£¬ÔÚSTLÖÐÌåÏÖÁË·ºÐÍ»¯³ÌÐòÉè¼ÆµÄ˼Ï루generic programming£©£¬ÒýÈëÁËÖî¶àеÄÃû´Ê£¬±ÈÈçÏñÐèÇó£¨requirements£©£¬¸ÅÄconcept£©£¬Ä£ÐÍ£¨model£©£¬ÈÝÆ÷£¨container£©£¬Ëã·¨£¨algorithmn£©£¬µü´ú×Ó£¨iterator£©µÈ¡£ÓëOOP£¨object-oriented programming£©ÖеĶà̬£¨polymorphism£©Ò»Ñù£¬·ºÐÍÒ²ÊÇÒ»ÖÖÈí¼þµÄ¸´Óü¼Êõ¡£

´ÓʵÏÖ²ã´Î¿´£¬Õû¸öSTLÊÇÒÔÒ»ÖÖÀàÐͲÎÊý»¯£¨type parameterized£©µÄ·½Ê½ÊµÏֵģ¬ÕâÖÖ·½Ê½»ùÓÚÒ»¸öÔÚÔçÏÈC++±ê×¼ÖÐûÓгöÏÖµÄÓïÑÔÌØÐÔ--Ä£°å£¨template£©¡£Èç¹û²éÔÄÈκÎÒ»¸ö°æ±¾µÄSTLÔ´´úÂ룬Äã¾Í»á·¢ÏÖ£¬Ä£°å×÷Ϊ¹¹³ÉÕû¸öSTLµÄ»ùʯÊÇÒ»¼þÇ§ÕæÍòÈ·µÄÊÂÇé¡£³ý´ËÖ®Í⣬»¹ÓÐÐí¶àC++µÄÐÂÌØÐÔΪSTLµÄʵÏÖÌṩÁË·½±ã¡£

²»ÖªÄã¶ÔÕâÀïÒ»ÏÂ×Óð³öÕâô¶àÊõÓï×öºÎ¸ÐÏ룬ϣÍû²»»áÁíÄã²»Óä¿ì¡£¼ÙÈçÄã¶ÔËüÃÇÖ®ÖеĴó¶àÊý²»ÉõÁ˽⣬¾´Çë·ÅÐÄ£¬ÔÚºóÐøÄÚÈÝÖн«»á¶ÔÕâЩÃû´ÊÖðÒ»ÂÛÊö¡£ÕýÈ翪ͷËùÌáµ½µÄ¡£

ÓÐȤµÄÊÇ£¬¶ÔÓÚSTL»¹ÓÐÁíÍâÒ»ÖÖ½âÊÍ--STepanov & Lee£¬Ç°ÕßÊÇÖ¸Alexander Stepanov£¬STLµÄ´´Ê¼ÈË£»¶øºóÕßÊÇMeng Lee£¬ËýÒ²ÊÇʹSTLµÃÒÔÍÆÐеŦ³¼£¬µÚÒ»¸öSTL³ÉÆ·¾ÍÊÇËûÃǺÏ×÷Íê³ÉµÄ¡£ÕâÒ»Ìá·¨Ô´×Ô1995Äê3Ô£¬Dr.Dobb's JournalÌØÔ¼¼ÇÕß, ÖøÃû¼¼ÊõÊé¼®×÷¼ÒAl Stevens¶ÔAlexander StepanovµÄһƪר·Ã¡£

1.2 ×·¸ùËÝÔ´£ºSTLµÄÀúÊ·

ÔÚ½áʶÐÂÅóÓѵÄʱºò£¬´ó¶àÊýÈË×ÜÊÇÈ̲»×¡ÏëÁ˽â¶Ô·½µÄ¹ýÈ¥¡£±¾½Ú½«´øÄú¼òµ¥»Ø¹ËÒ»ÏÂSTLµÄ¹ýÈ¥¡£

±»ÓþΪSTLÖ®¸¸µÄAlexander Stepanov£¬³öÉúÓÚËÕÁªÄªË¹¿Æ£¬ÔçÔÚ20ÊÀ¼Í70Äê´úºó°ëÆÚ£¬Ëû±ãÒѾ­¿ªÊ¼¿¼ÂÇ£¬ÔÚ±£Ö¤Ð§ÂʵÄǰÌáÏ£¬½«Ëã·¨´ÓÖî¶à¾ßÌåÓ¦ÓÃÖ®ÖгéÏó³öÀ´µÄ¿ÉÄÜÐÔ£¬Õâ±ãÊǺóÀ´·ºÐÍ»¯Ë¼ÏëµÄ³ûÐΡ£ÎªÁËÑéÖ¤×Ô¼ºµÄ˼Ï룬ËûºÍŦԼÖÝÁ¢´óѧ½ÌÊÚDeepak Kapur£¬Â×ÈûÀï¶û¼¼ÊõѧԺ½ÌÊÚDavid Musser¹²Í¬¿ª·¢ÁËÒ»ÖÖ½Ð×öTectonµÄÓïÑÔ¡£¾¡¹ÜÕâ´Î³¢ÊÔ×îÖÕûÓÐÈ¡µÃʵÓÃÐԵijɹû£¬µ«È´¸øÁËStepanovºÜ´óµÄÆôʾ¡£

ÔÚËæºóµÄ¼¸ÄêÖУ¬ËûÓÖºÍDavid MusserµÈÈËÏȺóÓÃSchemaÓïÑÔ£¨Ò»ÖÖLispÓïÑԵıäÖÖ£©ºÍAdaÓïÑÔ½¨Á¢ÁËһЩ´óÐͳÌÐò¿â¡£ÕâÆä¼ä£¬Alexander Stepanov¿ªÊ¼Òâʶµ½£¬ÔÚµ±Ê±µÄÃæÏò¶ÔÏó³ÌÐòÉè¼ÆË¼ÏëÖÐËù´æÔÚµÄһЩÎÊÌ⣬±ÈÈç³éÏóÊý¾ÝÀàÐ͸ÅÄîËù´æÔÚµÄȱÏÝ¡£StepanovÏ£Íûͨ¹ý¶ÔÈí¼þÁìÓòÖи÷×é³É²¿·ÖµÄ·ÖÀ࣬Öð½¥ÐγÉÒ»ÖÖÈí¼þÉè¼ÆµÄ¸ÅÄîÐÔ¿ò¼Ü¡£

1987Äê×óÓÒ£¬ÔÚ±´¶ûʵÑéÊÒ¹¤×÷µÄAlexander Stepanov¿ªÊ¼Ê״βÉÓÃC++ÓïÑÔ½øÐзºÐÍÈí¼þ¿âµÄÑо¿¡£µ«Òź¶µÄÊÇ£¬µ±Ê±µÄC++ÓïÑÔ»¹Ã»ÓÐÒýÈëÄ£°å£¨template£©µÄÓï·¨£¬ÏÖÔÚÎÒÃÇ¿ÉÒÔÇå³þµÄ¿´µ½£¬Ä£°å¸ÅÄîÖ®ÓÚSTLʵÏÖ£¬ÊǺεÈÖØÒª¡£ÊÇʱʹȻ£¬²ÉÓü̳лúÖÆÊDZðÎÞÑ¡ÔñµÄ¡£¾¡¹ÜÈç´Ë£¬Stepanov»¹ÊÇ¿ª·¢³öÁËÒ»¸öÅÓ´óµÄËã·¨¿â¡£Óë´Ëͬʱ£¬ÔÚÓëAndrew Koenig£¨Ç°ISO C++±ê×¼»¯Î¯Ô±»áÖ÷ϯ£©ºÍBjarne Stroustrup£¨C++ÓïÑԵĴ´Ê¼ÈË£©µÈ¶¥¼¶´óʦÃǵĹ²Ê¹ý³ÌÖУ¬Stepanov¿ªÊ¼×¢Òâµ½C/C++ÓïÑÔÔÚʵÏÖÆä·ºÐÍ˼Ïë·½ÃæËù¾ßÓеÄDZÔÚÓÅÊÆ¡£¾ÍÄÃC/C++ÖеÄÖ¸Õë¶øÑÔ£¬ËüµÄÁé»îÓë¸ßЧÔËÓã¬Ê¹ºóÀ´µÄSTLÔÚʵÏÖ·ºÐÍ»¯µÄͬʱ¸üÊDZ£³ÖÁ˸ßЧÂÊ¡£ÁíÍ⣬ÔÚSTLÖÐÕ¼¾Ý¼«ÆäÖØÒªµØÎ»µÄµü´ú×Ó¸ÅÄî±ãÊÇÔ´×ÔÓÚC/C++ÖÐÔ­ÉúÖ¸Õ루 native pointer£©µÄ³éÏó¡£

1988Ä꣬Alexander Stepanov¿ªÊ¼½øÈë»ÝÆÕµÄPalo AltoʵÑéÊÒ¹¤×÷£¬ÔÚËæºóµÄ4ÄêÖУ¬Ëû´ÓʵÄÊÇÓйشÅÅÌÇý¶¯Æ÷·½ÃæµÄ¹¤×÷¡£Ö±µ½1992Ä꣬ÓÉÓڲμӲ¢Ö÷³ÖÁËʵÑéÊÒÖ÷ÈÎBill WorleyËù½¨Á¢µÄÒ»¸öÓйØËã·¨µÄÑо¿ÏîÄ¿£¬²ÅʹËûÖØÐ»ص½ÁË·ºÐÍ»¯Ëã·¨µÄÑо¿¹¤×÷ÉÏÀ´¡£ÏîÄ¿×Ô½¨Á¢Ö®ºó£¬²ÎÓëÕß´Ó×î³õµÄ8ÈËÖð½¥¼õÉÙ£¬×îºóֻʣÏÂÁ½¸öÈË--Stepanove±¾È˺ÍMeng Lee¡£¾­¹ý³¤Ê±¼äµÄŬÁ¦£¬×îÖÕ£¬ÐÅÄîÓ뺹ˮËù»»À´µÄÊÇÒ»¸ö°üº¬ÓдóÁ¿Êý¾Ý½á¹¹ºÍËã·¨²¿¼þµÄÅÓ´óÔËÐп⡣Õâ±ãÊÇÏÖÔÚµÄSTLµÄ³ûÐΣ¨Í¬Ê±Ò²ÊÇSTLµÄÒ»¸öʵÏÖ°æ±¾--HP STL£©¡£

1993Ä꣬µ±Ê±ÔÚ±´¶ûʵÑéÊÒµÄAndrew Koenig¿´µ½ÁËStepanoveµÄÑо¿³É¹û£¬ºÜÊÇÐË·Ü¡£ÔÚËûµÄ¹ÄÀøÓë°ïÖúÏ£¬StepanoveÓÚÊÇÄê9ÔµÄÊ¥ºÎÈûΪANSI/ISO C++±ê׼ίԱ»á×öÁËÒ»¸öÏà¹ØÑݽ²£¨ÌâΪ"The Science of C++ Programming"£©£¬ÏòίԱÃǽ²ÊöÁËÆä¹ÛÄȻºóÓÖÓÚ´ÎÄê3Ô£¬ÔÚÊ¥µü¸ê»áÒéÉÏ£¬ÏòίԱ»áÌá½»ÁËÒ»·Ý½¨ÒéÊ飬ÒÔÆÚʹSTL³ÉΪC++±ê×¼¿âµÄÒ»²¿·Ö¡£¾¡¹ÜÕâÒ»½¨ÒéÊ®·ÖÅÓ´ó£¬ÒÔÖÁÓÚ½µµÍÁ˱»Í¨¹ýµÄ¿ÉÄÜÐÔ£¬µ«ÓÉÓÚÆäËù°üº¬µÄÐÂ˼Ï룬ͶƱ½á¹ûÒÔѹµ¹¶àÊýµÄÒâ¼ûÈÏÎªÍÆ³Ù¶Ô¸Ã½¨ÒéµÄ¾ö¶¨¡£

Ëæºó£¬ÔÚÖÚÈ˵İïÖú֮ϣ¬°üÀ¨Bjarne StroustrupÔÚÄÚ£¬StepanoveÓÖ¶ÔSTL½øÐÐÁ˸Ľø¡£Í¬Ê±¼ÓÈëÁËÒ»¸ö·â×°ÄÚ´æÄ£Ê½ÐÅÏ¢µÄ³éÏóÄ£¿é£¬Ò²¾ÍÊÇÏÖÔÚSTLÖеÄallocator£¬ËüʹSTLµÄ´ó²¿·ÖʵÏÖ¶¼¿ÉÒÔ¶ÀÁ¢ÓÚ¾ßÌåµÄÄÚ´æÄ£Ê½£¬´Ó¶ø¶ÀÁ¢ÓÚ¾ßÌåÆ½Ì¨¡£ÔÚͬÄêÏᄉϬÌú¬»áÒéÉÏ£¬Î¯Ô±ÃÇÒÔ80%Ô޳ɣ¬20%·´¶Ô£¬×îÖÕͨ¹ýÁËÌá°¸£¬¾ö¶¨½«STLÕýʽÄÉÈëC++±ê×¼»¯½ø³ÌÖ®ÖУ¬ËæºóSTL±ã±»·Å½øÁË»áÒéµÄ¹¤×÷ÎļþÖС£×Ô´Ë£¬STLÖÕÓÚ³ÉΪÁËC++¼Ò×åÖеÄÖØÒªÒ»Ô±¡£

´Ëºó£¬Ëæ×ÅC++±ê×¼µÄ²»¶Ï¸Ä½ø£¬STLÒ²ÔÚ²»¶ÏµØ×÷×ÅÏàÓ¦µÄÑÝ»¯¡£Ö±ÖÁ1998Ä꣬ANSI/ISO C++±ê×¼Õýʽ¶¨°¸£¬STLʼÖÕÊÇC++±ê×¼Öв»¿É»òȱµÄÒ»´ó²¿¼þ¡£

1.3 ǧ˿ÍòÂÆµÄÁªÏµ

ÔÚÄãÁ˽âÁËSTLµÄ¹ýÈ¥Ö®ºó£¬Ò»Ð©Ãû´Ê¿ªÊ¼²»¶ÏÔÚÄãµÄ´óÄÔÖи¡ÏÖ£¬STL¡¢C++¡¢C++±ê×¼º¯Êý¿â¡¢·ºÐͳÌÐòÉè¼Æ¡¢ÃæÏò¶ÔÏó³ÌÐòÉè¼Æ¡­¡­£¬ÕâЩ¸ÅÄîÒâζ×Åʲô£¿ËûÃÇÖ®¼äµÄ¹ØÏµÓÖÊÇʲô£¿Èç¹ûÄãÏëÁ˽âijЩϸ½Ú£¬ÕâÀïÒ²ÐíÓÐÄãÏ£ÍûµÃµ½µÄ´ð°¸¡£

1.3.1 STLºÍC++

ûÓÐC++ÓïÑÔ¾ÍûÓÐSTL£¬Õâô˵ºÁ²»Îª¹ý¡£Ò»°ã¶øÑÔ£¬STL×÷Ϊһ¸ö·ºÐÍ»¯µÄÊý¾Ý½á¹¹ºÍËã·¨¿â£¬²¢²»Ç£Éæ¾ßÌåÓïÑÔ£¨µ±È»£¬ÔÚC++ÀËü±»³ÆÎªSTL£©¡£Ò²¾ÍÊÇ˵£¬Èç¹ûÌõ¼þÔÊÐí£¬ÓÃÆäËûÓïÑÔÒ²¿ÉÒÔʵÏÖÖ®¡£ÕâÀïËù˵µÄÌõ¼þ£¬Ö÷ÒªÊÇÖ¸ÀàËÆÓÚ"Ä£°å"ÕâÑùµÄÓï·¨»úÖÆ¡£Èç¹ûÄãûÓÐÂÔ¹ýǰһ½ÚÄÚÈݵϰ£¬Ó¦¸Ã¿ÉÒÔ¿´µ½£¬Alexander StepanovÔÚÑ¡ÔñC++ÓïÑÔ×÷ΪʵÏÖ¹¤¾ß֮ǰ£¬ÔçÒÔ²ÉÓùý¶àÖÖ³ÌÐòÉè¼ÆÓïÑÔ¡£µ«ÊÇ£¬ÎªÊ²Ã´×îÖÕ»¹ÊÇC++ÐÒÔ˵ijе£ÁËÕâ¸öÀúÊ·ÐÔÈÎÎñÄØ£¿Ô­Òò²»½öÔÚÓÚǰÊöÄǸöÌõ¼þ£¬»¹ÔÚÓÚC++ÔÚijЩ·½ÃæËù±íÏÖ³öÀ´µÄÓÅÔ½ÌØÐÔ£¬±ÈÈ磺¸ßЧ¶øÁé»îµÄÖ¸Õë¡£µ«ÊÇÈç¹û°ÑC++×÷ΪһÖÖOOP£¨Object-Oriented Programming£¬ÃæÏò¶ÔÏó³ÌÐòÉè¼Æ£©ÓïÑÔÀ´¿´´ýµÄ»°£¨ÊÂʵÉÏÎÒÃÇÒ»°ã¶¼ÊÇÕâôÈÏΪµÄ£¬²»ÊÇÂ𣿣©£¬Æä¹¦ÄÜÇ¿´óµÄ¼Ì³Ð»úÖÆÈ´Ã»ÓиøSTLµÄʵÏÖ°ïÉ϶à´óµÄæ¡£ÔÚSTLµÄÔ´´úÂëÀ²¢Ã»ÓÐÌ«¶àÌ«¸´Ôӵļ̳йØÏµ¡£¼Ì³ÐµÄ˼Ï룬Éõ¶øÃæÏò¶ÔÏóµÄ˼Ï룬»¹²»×ãÒÔʵÏÖÀàËÆSTLÕâÑùµÄ·ºÐͿ⡣C++Ö»ÓÐÔÚÒýÈëÁË"Ä£°å"Ö®ºó£¬²ÅÖ±½Óµ¼ÖÂÁËSTLµÄµ®Éú¡£ÕâÒ²ÕýÊÇΪʲô£¬ÓÃÆäËû±ÈC++¸ü´¿µÄÃæÏò¶ÔÏóÓïÑÔÎÞ·¨ÊµÏÖ·ºÐÍ˼ÏëµÄÒ»¸öÖØÒªÔ­Òò¡£µ±È»£¬ÊÂÇé×ÜÊÇÔڱ仯֮ÖУ¬ÏñJavaÔÚÕâ·½Ãæ£¬¾ÍÊÇÒ»¸öºÜºÃµÄÀý×Ó£¬jdk1.4ÖÐÒѾ­¼ÓÈëÁË·ºÐ͵ÄÌØÐÔ¡£

´ËÍ⣬STL¶ÔÓÚC++µÄ·¢Õ¹£¬ÓÈÆäÊÇÄ£°å»úÖÆ£¬Ò²Æðµ½ÁË´Ù½ø×÷ÓᣱÈÈ磺ģ°åº¯ÊýµÄÆ«ÌØ»¯£¨template function partial specialization£©£¬Ëü±»ÓÃÓÚÔÚÌØ¶¨Ó¦Óó¡ºÏ£¬ÎªÒ»°ãÄ£°åº¯ÊýÌṩһϵÁÐÌØÊ⻯°æ±¾¡£ÕâÒ»ÌØÐÔÊǼÌSTL±»ANSI/ISO C++±ê׼ίԱ»áͨ¹ýÖ®ºó£¬ÔÚBjarneºÍStepanov¹²Í¬ÉÌÌÖ֮ϲ¢ÓÉBjarneÏòίԱ»áÌá³ö½¨ÒéµÄ£¬×îÖÕ¸ÃÏÒ鱻ͨ¹ý¡£ÕâʹµÃSTLÖеÄһЩËã·¨ÔÚ´¦ÀíÌØÊâÇéÐÎʱ¿ÉÒÔÑ¡Ôñ·ÇÒ»°ã»¯µÄ·½Ê½£¬´Ó¶ø±£Ö¤ÁËÖ´ÐеÄЧÂÊ¡£

1.3.2 STLºÍC++±ê×¼º¯Êý¿â

STLÊÇ×îеÄC++±ê×¼º¯Êý¿âÖеÄÒ»¸ö×Ó¼¯£¬Õâ¸öÅÓ´óµÄ×Ó¼¯Õ¼¾ÝÁËÕû¸ö¿âµÄ´óÔ¼80%µÄ·ÖÁ¿¡£¶ø×÷ΪÔÚʵÏÖSTL¹ý³ÌÖаçÑݹؼü½ÇÉ«µÄÄ£°åÔò³ä³âÁ˼¸ºõÕû¸öC++±ê×¼º¯Êý¿â¡£ÔÚÕâÀÎÒÃÇÓбØÒª¿´Ò»¿´C++±ê×¼º¯Êý¿âÀï°üº¬ÁËÄÄЩÄÚÈÝ£¬ÆäÖÐÓÖÓÐÄÄЩÊÇÊôÓÚ±ê׼ģ°å¿â£¨¼´STL£©µÄ¡£

C++±ê×¼º¯Êý¿âΪC++³ÌÐòÔ±ÃÇÌṩÁËÒ»¸ö¿ÉÀ©Õ¹µÄ»ù´¡ÐÔ¿ò¼Ü¡£ÎÒÃÇ´ÓÖпÉÒÔ»ñµÃ¼«´óµÄ±ãÀû£¬Í¬Ê±Ò²¿ÉÒÔͨ¹ý¼Ì³ÐÏÖÓÐÀ࣬×Ô¼º±àÖÆ·ûºÏ½Ó¿Ú¹æ·¶µÄÈÝÆ÷¡¢Ëã·¨¡¢µü´ú×ӵȷ½Ê½¶ÔÖ®½øÐÐÀ©Õ¹¡£Ëü´óÖ°üº¬ÁËÈçϼ¸¸ö×é¼þ£º

C±ê×¼º¯Êý¿â£¬»ù±¾±£³ÖÁËÓëÔ­ÓÐCÓïÑÔ³ÌÐò¿âµÄÁ¼ºÃ¼æÈÝ£¬¾¡¹ÜÓÐЩ΢±ä»¯¡£ÈËÃÇ×Ü»áÈ̲»×¡ÁôÁµ¹ýÈ¥µÄÃÀºÃËêÔ£¬Èç¹ûÄãÔø¾­ÊÇÒ»¸öC³ÌÐòÔ±£¬¶ÔÕâÒ»µãÒ»¶¨Ìå»áÆÄÉî¡£»òÐíÓÐÒ»µã»áÈÃÄã¾õµÃÆæ¹Ö£¬ÄǾÍÊÇÔÚC++±ê×¼¿âÖдæÔÚÁ½Ì×CµÄº¯Êý¿â£¬Ò»Ì×ÊÇ´øÓÐ.hÀ©Õ¹ÃûµÄ£¨±ÈÈç<stdio.h>£©£¬¶øÁíÒ»Ì×ÔòûÓУ¨±ÈÈç<cstdio>£©¡£ËüÃÇȷʵûÓÐÌ«´óµÄ²»Í¬¡£

ÓïÑÔÖ§³Ö£¨language support£©²¿·Ö£¬°üº¬ÁËһЩ±ê×¼ÀàÐ͵͍ÒåÒÔ¼°ÆäËûÌØÐԵ͍Ò壬ÕâЩÄÚÈÝ£¬±»ÓÃÓÚ±ê×¼¿âµÄÆäËûµØ·½»òÊǾßÌåµÄÓ¦ÓóÌÐòÖС£

Õï¶Ï£¨diagnostics£©²¿·Ö£¬ÌṩÁËÓÃÓÚ³ÌÐòÕï¶ÏºÍ±¨´íµÄ¹¦ÄÜ£¬°üº¬ÁËÒì³£´¦Àí£¨exception handling£©£¬¶ÏÑÔ£¨assertions£©£¬´íÎó´úÂ루error number codes£©ÈýÖÖ·½Ê½¡£

ͨÓù¤¾ß£¨general utilities£©²¿·Ö£¬Õⲿ·ÖÄÚÈÝΪC++±ê×¼¿âµÄÆäËû²¿·ÖÌṩ֧³Ö£¬µ±È»ÄãÒ²¿ÉÒÔÔÚ×Ô¼ºµÄ³ÌÐòÖе÷ÓÃÏàÓ¦¹¦ÄÜ¡£±ÈÈ磺¶¯Ì¬ÄÚ´æ¹ÜÀí¹¤¾ß£¬ÈÕÆÚ/ʱ¼ä´¦Àí¹¤¾ß¡£¼Çס£¬ÕâÀïµÄÄÚÈÝÒ²ÒѾ­±»·º»¯ÁË£¨¼´²ÉÓÃÁËÄ£°å»úÖÆ£©¡£

×Ö·û´®£¨string£©²¿·Ö£¬ÓÃÀ´´ú±íºÍ´¦ÀíÎı¾¡£ËüÌṩÁË×ã¹»·á¸»µÄ¹¦ÄÜ¡£ÊÂʵÉÏ£¬Îı¾ÊÇÒ»¸östring¶ÔÏó£¬Ëü¿ÉÒÔ±»¿´×÷ÊÇÒ»¸ö×Ö·ûÐòÁУ¬×Ö·ûÀàÐÍ¿ÉÄÜÊÇchar£¬»òÕßwchar_tµÈµÈ¡£string¿ÉÒÔ±»×ª»»³Échar*ÀàÐÍ£¬ÕâÑù±ã¿ÉÒÔºÍÒÔǰËùдµÄC/C++´úÂëºÍƽ¹²´¦ÁË¡£ÒòΪÄÇʱºî³ýÁËchar*£¬Ã»ÓбðµÄ¡£

¹ú¼Ê»¯£¨internationalization£©²¿·Ö£¬×÷ΪOOPÌØÐÔÖ®Ò»µÄ·â×°»úÖÆÔÚÕâÀï°çÑÝ×ÅÏû³ýÎÄ»¯ºÍµØÓò²îÒìµÄ½ÇÉ«£¬²ÉÓÃlocaleºÍfacet¿ÉÒÔΪ³ÌÐòÌṩÖÚ¶à¹ú¼Ê»¯Ö§³Ö£¬°üÀ¨¶Ô¸÷ÖÖ×Ö·û¼¯µÄÖ§³Ö£¬ÈÕÆÚºÍʱ¼äµÄ±íʾ£¬ÊýÖµºÍ»õ±ÒµÄ´¦ÀíµÈµÈ¡£±Ï¾¹£¬ÔÚÖйúºÍÔÚÃÀ¹ú£¬ÈËÃDZíʾÈÕÆÚµÄϰ¹ßÊDz»Í¬µÄ¡£

ÈÝÆ÷£¨containers£©²¿·Ö£¬STLµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬º­¸ÇÁËÐí¶àÊý¾Ý½á¹¹£¬±ÈÈçÇ°ÃæÔø¾­Ìáµ½µÄÁ´±í£¬»¹ÓУºvector£¨ÀàËÆÓÚ´óС¿É¶¯Ì¬Ôö¼ÓµÄÊý×飩¡¢queue£¨¶ÓÁУ©¡¢stack£¨¶ÑÕ»£©¡­¡­¡£stringÒ²¿ÉÒÔ¿´×÷ÊÇÒ»¸öÈÝÆ÷£¬ÊÊÓÃÓÚÈÝÆ÷µÄ·½·¨Í¬ÑùÒ²ÊÊÓÃÓÚstring¡£ÏÖÔÚÄã¿ÉÒÔÇáËɵÄÍê³ÉÊý¾Ý½á¹¹¿Î³ÌµÄ¼ÒÍ¥×÷ÒµÁË¡£

Ëã·¨£¨algorithms£©²¿·Ö£¬STLµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬°üº¬ÁË´óÔ¼70¸öͨÓÃËã·¨£¬ÓÃÓڲٿظ÷ÖÖÈÝÆ÷£¬Í¬Ê±Ò²¿ÉÒÔ²Ù¿ØÄÚ½¨Êý×é¡£±ÈÈ磺findÓÃÓÚÔÚÈÝÆ÷ÖвéÕÒµÈÓÚij¸öÌØ¶¨ÖµµÄÔªËØ£¬for_eachÓÃÓÚ½«Ä³¸öº¯ÊýÓ¦Óõ½ÈÝÆ÷Öеĸ÷¸öÔªËØÉÏ£¬sortÓÃÓÚ¶ÔÈÝÆ÷ÖеÄÔªËØÅÅÐò¡£ËùÓÐÕâЩ²Ù×÷¶¼ÊÇÔÚ±£Ö¤Ö´ÐÐЧÂʵÄǰÌáϽøÐеģ¬ËùÒÔ£¬Èç¹ûÔÚÄãʹÓÃÁËÕâЩËã·¨Ö®ºó³ÌÐò±äµÃЧÂʵ×Ï£¬Ê×ÏÈÒ»¶¨²»Òª»³ÒÉÕâЩËã·¨±¾Éí£¬×Ðϸ¼ì²éһϳÌÐòµÄÆäËûµØ·½¡£

µü´úÆ÷£¨iterators£©²¿·Ö£¬STLµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬Èç¹ûûÓеü´úÆ÷µÄ´éºÏ£¬ÈÝÆ÷ºÍËã·¨±ãÎÞ·¨½áºÏµÄÈç´ËÍêÃÀ¡£ÊÂʵÉÏ£¬Ã¿¸öÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄµü´úÆ÷£¬Ö»ÓÐÈÝÆ÷×Ô¼º²ÅÖªµÀÈçºÎ·ÃÎÊ×Ô¼ºµÄÔªËØ¡£ËüÓеãÏñÖ¸Õ룬Ë㷨ͨ¹ýµü´úÆ÷À´¶¨Î»ºÍ²Ù¿ØÈÝÆ÷ÖеÄÔªËØ¡£

ÊýÖµ£¨numerics£©²¿·Ö£¬°üº¬ÁËһЩÊýѧÔËË㹦ÄÜ£¬ÌṩÁ˸´ÊýÔËËãµÄÖ§³Ö¡£

ÊäÈë/Êä³ö£¨input/output£©²¿·Ö£¬¾ÍÊǾ­¹ýÄ£°å»¯Á˵ÄÔ­Óбê×¼¿âÖеÄiostream²¿·Ö£¬ËüÌṩÁ˶ÔC++³ÌÐòÊäÈëÊä³öµÄ»ù±¾Ö§³Ö¡£ÔÚ¹¦ÄÜÉϱ£³ÖÁËÓëÔ­ÓÐiostreamµÄ¼æÈÝ£¬²¢ÇÒÔö¼ÓÁËÒì³£´¦ÀíµÄ»úÖÆ£¬²¢Ö§³Ö¹ú¼Ê»¯£¨internationalization£©¡£

×ÜÌåÉÏ£¬ÔÚC++±ê×¼º¯Êý¿âÖУ¬STLÖ÷Òª°üº¬ÁËÈÝÆ÷¡¢Ëã·¨¡¢µü´úÆ÷¡£stringÒ²¿ÉÒÔËã×öÊÇSTLµÄÒ»²¿·Ö¡£

ͼ1£ºSTLºÍC++±ê×¼º¯Êý¿â

1.3.3 STLºÍGP£¬GPºÍOOP

ÕýÈçÇ°ÃæËùÌáµ½µÄ£¬ÔÚSTLµÄ±³ºóÔ̺¬×Å·ºÐÍ»¯³ÌÐòÉè¼Æ£¨GP£©µÄ˼Ï룬ÔÚÕâÖÖ˼ÏëÀ´ó²¿·Ö»ù±¾Ëã·¨±»³éÏ󣬱»·º»¯£¬¶ÀÁ¢ÓÚÓëÖ®¶ÔÓ¦µÄÊý¾Ý½á¹¹£¬ÓÃÓÚÒÔÏàͬ»òÏà½üµÄ·½Ê½´¦Àí¸÷ÖÖ²»Í¬ÇéÐΡ£Õâһ˼ÏëºÍÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆË¼Ï루OOP£©²»¾¡Ïàͬ£¬ÒòΪ£¬ÔÚOOPÖиü×¢ÖØµÄÊǶÔÊý¾ÝµÄ³éÏ󣬼´Ëùν³éÏóÊý¾ÝÀàÐÍ£¨Abstract Data Type£©£¬¶øËã·¨Ôòͨ³£±»¸½ÊôÓÚÊý¾ÝÀàÐÍÖ®ÖС£¼¸ºõËùÓеÄÊÂÇé¶¼¿ÉÒÔ±»¿´×÷Àà»òÕß¶ÔÏ󣨼´ÀàµÄʵÀý£©£¬Í¨³££¬ÎÒÃÇËù¿´µ½µÄËã·¨±»×÷Ϊ³ÉÔ±º¯Êý£¨member function£©°üº¬ÔÚÀࣨclass£©ÖУ¬ÀàºÍÀàÔò¹¹³ÉÁË´í×Û¸´Ôӵļ̳ÐÌåϵ¡£

¾¡¹ÜÔÚÏóC++ÕâÑùµÄ³ÌÐòÉè¼ÆÓïÑÔÖУ¬Ä㻹¿ÉÒÔÓÃÈ«¾Öº¯ÊýÀ´±íʾËã·¨£¬µ«ÊÇÔÚÀàËÆÓÚJavaÕâÑùµÄ´¿ÃæÏò¶ÔÏóµÄÓïÑÔÖУ¬È«¾Öº¯ÊýÒѾ­±»"ÀÕÁî½ûÖ¹"ÁË¡£Òò´Ë£¬ÓÃJavaÀ´Ä£ÄâGP˼ÏëÊÇÆÄΪÀ§Äѵġ£Èç¹ûÄã¶ÔǰÊöµÄSTLÀúÊ·»¹ÓÐÓ¡ÏóµÄ»°£¬Ó¦¸Ã¼ÇµÃAlexander StepanoveÒ²ÔøÓûùÓÚOOPµÄÓïÑÔ³¢ÊÔ¹ýʵÏÖGP˼Ï룬µ«ÊÇЧ¹û²¢²»ºÃ£¬°üÀ¨Ã»ÓÐÒýÈëÄ£°å֮ǰµÄC++ÓïÑÔ¡£Õ¾ÔÚ¾ÞÈ˵ļç°òÉÏ£¬ÎÒÃÇ¿ÉÒԵóöÕâÑùµÄ½áÂÛ£¬ÔÚOOPÖÐËùÌåÏÖµÄ˼ÏëÓëGPµÄ˼ÏëȷʵÊÇÏàÒìµÄ¡£C++²¢²»ÊÇÒ»ÖÖ´¿ÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ËüµÄ¾øÃîÖ®´¦£¬¾ÍÔÚÓÚ¼ÈÂú×ãÁËOOP£¬ÓÖ³ÉÈ«ÁËGP¡£¶ÔÓÚºóÕߣ¬Ä£°åÁ¢ÏÂÁ˺¹Âí¹¦ÀÍ¡£ÁíÍ⣬ÐèÒªÖ¸³öµÄÊÇ£¬¾¡¹ÜGPºÍOOPÓÐÖî¶à²»Í¬£¬µ«ÕâÖÖ²»Í¬»¹²»ÖÁÓÚµ½"Ë®»ð²»ÈÝ"µÄµØ²½¡£²¢ÇÒ£¬ÔÚʵ¼ÊÔËÓõÄʱºò£¬Á½ÕߵĽáºÏʹÓÃÍùÍù¿ÉÒÔʹÎÊÌâµÄ½â¾ö¸üΪÓÐЧ¡£×÷ΪGP˼ÏëʵÀýµÄSTL±¾Éí±ãÊÇÒ»¸öºÜºÃµÄ·¶Àý£¬Èç¹ûûÓм̳У¬²»ÖªµÀSTL»áÊÇʲôÑù×Ó£¬ËƺõûÓÐÈË×ö¹ýÕâÑùµÄÊÔÑé¡£

1.4 STLµÄ²»Í¬ÊµÏÖ°æ±¾

ÏàÐÅÄã¶ÔSTLµÄ¸ÐÐÔÈÏʶӦ¸ÃÓÐËùÌá¸ßÁË£¬ÊǸÃ×öһЩʵ¼ÊµÄ¹¤×÷ÁË£¬ÄÇôÎÒÃÇÊ×ÏÈÀ´Á˽âÒ»ÏÂSTLµÄ²»Í¬ÊµÏÖ°æ±¾¡£ANSI/ISO C++ÎļþÖеÄSTLÊÇÒ»¸ö½ö±»ÃèÊöÔÚÖ½Éϵıê×¼£¬¶ÔÓÚÖî¶àC++±àÒëÆ÷¶øÑÔ£¬ÐèÒªÓи÷×Ôʵ¼ÊµÄSTL£¬ËüÃÇ»ò¶à»òÉÙµÄʵÏÖÁ˱ê×¼ÖÐËùÃèÊöµÄÄÚÈÝ£¬ÕâÑù²ÅÄܹ»ÎªÎÒÃÇËùÓá£Ö®ËùÒÔÓв»Í¬µÄʵÏÖ°æ±¾£¬Ôò´æÔÚÖî¶àÔ­Òò£¬ÓÐÀúÊ·µÄÔ­Òò£¬Ò²Óи÷×Ô±àÒëÆ÷Éú²ú³§É̵ÄÔ­Òò¡£ÒÔÏÂÊǼ¸¸ö³£¼ûµÄSTLʵÏÖ°æ±¾¡£

1.4.1 HP STL

HP STLÊÇËùÓÐÆäËüSTLʵÏÖ°æ±¾µÄ¸ùÔ´¡£ËüÊÇSTLÖ®¸¸Alexander StepanovÔÚ»ÝÆÕµÄPalo AltoʵÑéÊÒ¹¤×÷ʱ£¬ºÍMeng Lee¹²Í¬Íê³ÉµÄ£¬ÊǵÚÒ»¸öSTLµÄʵÏÖ°æ±¾£¨²Î¼û1.2½Ú£©¡£Õâ¸öSTLÊÇ¿ª·ÅÔ´ÂëµÄ£¬ËùÒÔËüÔÊÐíÈκÎÈËÃâ·ÑʹÓᢸ´ÖÆ¡¢Ð޸ġ¢·¢²¼ºÍÏúÊÛ¸ÃÈí¼þºÍÏà¹ØÎĵµ£¬Ç°ÌáÊDZØÐëÔÚËùÓÐÏà¹ØÎļþÖмÓÈëHP STLµÄ°æ±¾ÐÅÏ¢ºÍÊÚȨÐÅÏ¢¡£ÏÖÔÚÒѾ­ºÜÉÙÖ±½ÓʹÓÃÕâ¸ö°æ±¾µÄSTLÁË¡£

1.4.2 P.J. Plauger STL

P. J. Plauger STLÊôÓÚ¸öÈË×÷Æ·£¬ÓÉP. J. Plauger±¾ÈËʵÏÖ£¬ÊÇHP STLµÄÒ»¸ö¼Ì³Ð°æ±¾£¬Òò´ËÔÚÆäËùÓÐÍ·ÎļþÖж¼º¬ÓÐHP STLµÄÏà¹ØÉùÃ÷£¬Í¬Ê±»¹ÓÐP. J. Plauger±¾È˵İæÈ¨ÉùÃ÷¡£P. J. PlaugerÊDZê×¼CÖÐstdio¿âµÄÔçÆÚʵÏÖÕߣ¬ÏÖÔÚÊÇC/C++ User's JournalµÄÖ÷±à£¬ÓëMicrosoft±£³Ö×ÅÁ¼ºÃµÄ¹ØÏµ¡£P. J. Plauger STL±ãÊDZ»ÓÃÓÚMicrosoftµÄVisual C++Öеġ£ÔÚWindowsƽ̨ϵÄͬÀà°æ±¾ÖУ¬ÆäÐÔÄܲ»´í£¬µ«ÊÇqueue×é¼þ£¨¶ÓÁУ¬Ò»ÖÖÈÝÆ÷£©µÄЧÂʲ»ÀíÏ룬ͬʱÓÉÓÚVisual C++¶ÔC++ÓïÑÔ±ê×¼µÄÖ§³Ö²»ÊǺܺã¨ÖÁÉÙÖ±µ½VC6.0Ϊֹ£¬»¹ÊÇÈç´Ë£©£¬Òò´ËÒ»¶¨³Ì¶ÈÉÏÓ°ÏìÁËP. J. Plauger STLµÄÐÔÄÜ¡£´ËÍ⣬¸Ã°æ±¾µÄÔ´´úÂë¿É¶ÁÐԽϲÄã¿ÉÒÔÔÚVCµÄInclude×ÓĿ¼ÏÂÕÒµ½ËùÓÐÔ´Îļþ£¨±ÈÈ磺C:\Program Files\Microsoft Visual Studio\VC98\Include£©¡£ÒòΪ²»ÊÇ¿ª·ÅÔ´ÂëµÄ£¨open source£©£¬ËùÒÔÕâЩԴ´úÂëÊDz»ÄÜÐ޸ĺÍÏúÊ۵ģ¬Ä¿Ç°P.J. Plauger STLÓÉDinkumware¹«Ë¾ÌṩÏà¹Ø·þÎñ£¬ÏêÇéÇë¼ûhttp://www.dinkumware.comVisualStudiohashsetÈÝÆ÷¡£

1.4.3 Rouge Wave STL

Rouge Wave STLÊÇÓÉRouge Wave¹«Ë¾ÊµÏֵģ¬Ò²ÊÇHP STLµÄÒ»¸ö¼Ì³Ð°æ±¾£¬³ýÁËHP STLµÄÏà¹ØÉùÃ÷Ö®Í⣬»¹ÓÐRouge Wave¹«Ë¾µÄ°æÈ¨ÉùÃ÷¡£Í¬Ê±£¬ËüÒ²²»ÊÇ¿ª·ÅÔ´ÂëµÄ£¬Òò´ËÎÞ·¨Ð޸ĺÍÏúÊÛ¡£¸Ã°æ±¾±»Borland C++ BuilderËù²ÉÓã¬Äã¿ÉÒÔÔÚC++ BuilderµÄInclude×ÓĿ¼ÏÂÕÒµ½ËùÓÐÍ·Îļþ£¨±ÈÈ磺C:\Program Files\Borland\Cbuilder5\Include£©¡£¾¡¹ÜRouge Wave STLµÄÐÔÄܲ»ÊǺܺ㬵«ÓÉÓÚC++ Builder¶ÔC++ÓïÑÔ±ê×¼µÄÖ§³Ö»¹Ëã²»´í£¬Ê¹Æä±íÏÖÔÚÒ»¶¨³Ì¶ÈÉϵÃÒÔ¸ÄÉÆ¡£´ËÍ⣬ÆäÔ´´úÂëµÄ¿É¶ÁÐԽϺ᣿ÉÒÔ´ÓÈçÏÂÍøÕ¾µÃµ½¸üÏêϸµÄÇé¿ö½éÉÜ£ºhttp://www.rougewave.comÔ´´úÂëC:Program Files\Borland\Cbuilder6\Include\oldstl£©¡£

1.4.4 STLport

STLport×î³õÔ´ÓÚ¶í¹úÈËBoris FomitchevµÄÒ»¸ö¿ª·¢ÏîÄ¿£¬Ö÷ÒªÓÃÓÚ½«SGI STLµÄ»ù±¾´úÂëÒÆÖ²µ½ÆäËûÖîÈçC++Builder»òÕßÊÇVisual C++ÕâÑùµÄÖ÷Á÷±àÒëÆ÷ÉÏ¡£ÒòΪSGI STLÊôÓÚ¿ª·ÅÔ´Â룬ËùÒÔSTLport²ÅÓÐȨÕâÑù×ö¡£Ä¿Ç°STLportµÄ×îа汾ÊÇ4.5¡£¿ÉÒÔ´ÓÈçÏÂÍøÕ¾µÃµ½¸üÏêϸµÄÇé¿ö½éÉÜ£ºhttp://www.stlport.orgÃâ·ÑÏÂÔØVCÖеÄSTLÒª¿ì¡£±ÈRouge Wave STL¸ü·ûºÏ±ê×¼£¬Ò²¸üÈÝÒ×ÒÆÖ²¡£Borland C++ BuilderÒѾ­ÔÚÆä6.0°æÖмÓÈëÁ˶ÔSTLportµÄÖ§³Ö£¬ËüʹÓõÄSTLport¾ÍÊÇ4.5°æµÄ£¬C++ Builder 6.0ͬʱ»¹ÌṩÁËSTLportµÄʹÓÃ˵Ã÷¡£Äã¿ÉÒÔÔÚC++ BuilderµÄInclude\Stlport×ÓĿ¼ÏÂÕÒµ½ËùÓÐÍ·Îļþ£¨±ÈÈ磺C:\Program Files\Borland\Cbuilder6\Include\Stlport£©¡£

1.4.5 SGI STL

SGI STLÊÇÓÉSilicon Graphics Computer System, Inc¹«Ë¾ÊµÏֵ쬯äÉè¼ÆÕߺͱàдÕß°üÀ¨Alexander StepanovºÍMatt Austern£¬Í¬ÑùËüÒ²ÊÇHP STLµÄÒ»¸ö¼Ì³Ð°æ±¾¡£ËüÊôÓÚ¿ª·ÅÔ´Â룬Òò´ËÄã¿ÉÒÔÐ޸ĺÍÏúÊÛËü¡£SGI STL±»GCC£¨linuxϵÄC++±àÒëÆ÷£©Ëù²ÉÓã¬Äã¿ÉÒÔÔÚGCCµÄInclude×ÓĿ¼ÏÂÕÒµ½ËùÓÐÍ·Îļþ£¨±ÈÈ磺C:\cygnus\cygwin-b20\include\g++\include£©¡£ÓÉÓÚGCC¶ÔC++ÓïÑÔ±ê×¼µÄÖ§³ÖºÜºÃ£¬SGI STLÔÚlinuxƽ̨ÉϵÄÐÔÄÜÏ൱³öÉ«¡£´ËÍ⣬ÆäÔ´´úÂëµÄ¿É¶ÁÐÔÒ²ºÜºÃ¡£¿ÉÒÔ´ÓÈçÏÂÍøÕ¾µÃµ½¸üÏêϸµÄÇé¿ö½éÉÜ£ºhttp://www.sgi.comа汾ÊÇ3.3¡£

ͼ2£ºSTL¼Ò×åµÄÆ×ϵ

2 Å£µ¶Ð¡ÊÔ£ºÇÒ¿´Ò»¸ö¼òµ¥Àý³Ì

2.1 Òý×Ó

Èç¹ûÄãÊÇÒ»¸ö´¿´âµÄʵÓÃÖ÷ÒåÕߣ¬Ò²ÐíÒ»¿ªÊ¼¾Í¿ÉÒÔ´ÓÕâÀ↑ʼ¿´Æð£¬ÒòΪ´Ë´¦ÌṩÁËÒ»¸öʾÀý³ÌÐò£¬Ëü¿ÉÒÔ´ø¸øÄãÓйØÊ¹ÓÃSTLµÄ×îÖ±½ÓµÄ¸ÐÊÜ¡£Êǵģ¬ÓëÆäÖ½ÉÏ̸±ø£¬²»Èçµ¥µ¶Ö±È룬ʵ¼Ê²Ù×÷Ò»·¬¡£µ«ÊÇ£¬ÐèÒªÌáÐѵÄÊÇ£¬¼ÙÈçÄãÔÚÐËÖ°ºÈ»µØÏ¸Ï¸Æ·Î¶±¾ÕÂÄÚÈݵÄʱºò£¬Äܹ»Í¬Ê±½áºÏÇ°ÃæÕ½Ú×÷Ϊ×ô²Í£¬Äǽ«ÊÇÔٺò»¹ýµÄ¡£Äã»á·¢ÏÖ£¬Ç°ÃæËùÌáµ½µÄÓйØSTLµÄÄÇЩÓŵ㣬ÔÚ´Ë´¦µÃµ½ÁËÈ·ÇеÄÓ¦Ö¤¡£±¾Õµĺó°ë²¿·Ö£¬½«ÎªÄãÑÝʾÔÚһЩÖ÷Á÷C++±àÒëÆ÷ÉÏ£¬ÔËÐÐÉÏÊöʾÀý³ÌÐòµÄ¾ßÌå²Ù×÷·½·¨£¬ºÍÐèҪעÒâµÄÊÂÏî¡£

2.2 Àý³Ìʵ×÷

·Ç³£Òź¶£¬ÎÒ²»µÃ²»ÉáÆú"Hello World"Õâ¸ö¾­µäµÄ·¶Àý£¬¾¡¹ÜËü²»Ö»Ò»´ÎµÄ±»¸÷ÖÖ½éÉܼÆËã»úÓïÑԵĽ̿ÆÊéËùÒýÓ㬼¸ºõ³ÉΪÁËÒ»¸öĬÈϵġ°±ê×¼¡±¡£ÆäÔ­ÒòÔÚÓÚËüÌ«¹ý¼òµ¥ÁË£¬ÒÔÖÁÓÚ²»¾ß±¸´ú±íÐÔ£¬ÎÞ·¨Õ¹ÏÖSTLµÄ¾Þ´ó÷ÈÁ¦¡£ÎÒÑ¡ÓÃÁËÒ»¸öÉÔÉÔ¸´ÔÓÒ»µãµÄÀý×Ó£¬ËüµÄ´óÖ¹¦ÄÜÊÇ£º´Ó±ê×¼ÊäÈëÉ豸£¨Ò»°ãÊǼüÅÌ£©¶ÁÈëһЩÕûÐÍÊý¾Ý£¬È»ºó¶ÔËüÃǽøÐÐÅÅÐò£¬×îÖÕ½«½á¹ûÊä³öµ½±ê×¼Êä³öÉ豸£¨Ò»°ãÊÇÏÔʾÆ÷ÆÁÄ»£©¡£ÕâÊÇÒ»ÖÖµäÐ͵Ĵ¦Àí·½Ê½£¬³ÌÐò±¾Éí¾ß±¸ÁËÒ»¸öϵͳËùÓ¦¸Ã¾ßÓеļ¸ºõËùÓеĻù±¾ÌØÕ÷£ºÊäÈë + ´¦Àí + Êä³ö¡£Ä㽫»á¿´µ½Èý¸ö²»Í¬°æ±¾µÄ³ÌÐò¡£µÚÒ»¸öÊÇûÓÐʹÓÃSTLµÄÆÕͨC++³ÌÐò£¬Ä㽫»á¿´µ½Íê³ÉÕâÑù¿´ËƼòµ¥µÄÊÂÇ飬ÐèÒª»¨¶à´óµÄÁ¦Æø£¬¶øÇÒ»¹Î´±ØÃ»ÓÐÒ»µãÎÊÌâ£¨ÕæÊdzÔÁ¦²»Ìֺã©¡£µÚ¶þ¸ö³ÌÐòµÄÖ÷Ì岿·ÖʹÓÃÁËSTLÌØÐÔ£¬´ËʱÔÚµÚÒ»¸ö³ÌÐòÖÐËùÓöµ½µÄÎÊÌâ¾Í»ù±¾¿ÉÒÔ½â¾öÁË¡£Í¬Ê±£¬Äã»á·¢ÏÖ²ÉÓÃÁËSTLÖ®ºó£¬³ÌÐò±äµÃ¼ò½àÃ÷¿ì£¬ÇåÎúÒ×¶Á¡£µÚÈý¸ö³ÌÐòÔò½«STLµÄ¹¦ÄÜ·¢»Óµ½Á˼°ÖÁ£¬Äã¿ÉÒÔ¿´µ½³ÌÐòÀXºõÿһÐдúÂë¶¼ÊǺÍSTLÏà¹ØµÄ¡£ÕâÑùµÄ»ú»á²¢²»×ÜÊÇËæ´¦¿É¼ûµÄ£¬ËüÕ¹ÏÖÁËSTLÖеļ¸ºõËùÓеĻù±¾×é³É²¿·Ö£¬¾¡¹ÜÕâ¿´ÆðÀ´ËƺõÓеã¹ý·ÖÁË¡£

Óм¸µãÊÇÐèҪ˵Ã÷µÄ£º

Õâ¸öÀý³ÌµÄÄ¿µÄ£¬ÔÚÓÚÏòÄãÑÝʾÈçºÎÔÚC++³ÌÐòÖÐʹÓÃSTL£¬Í¬Ê±Ï£Íûͨ¹ýʵ¼ù£¬Ö¤Ã÷STLËù´ø¸øÄãµÄȷȷʵʵµÄºÃ´¦¡£³ÌÐòÖÐÓõ½µÄһЩSTL»ù±¾×é¼þ£¬±ÈÈ磺vector£¨Ò»ÖÖÈÝÆ÷£©¡¢sort£¨Ò»ÖÖÅÅÐòËã·¨£©£¬ÄãÖ»ÐèÒªÓÐÒ»¸ö´óÖµĸÅÄî¾Í¿ÉÒÔÁË£¬Õâ²¢²»Ó°ÏìÔĶÁ´úÂëºÍÀí½â³ÌÐòµÄº¬Òå¡£

ºÜ¶àÈ˶ÔGUI£¨Í¼ÐÎÓû§½çÃæ£©µÄÔËÐз½Ê½ºÜ¸ÐÐËȤ£¬ÕâÒ²Äѹ֣¬Æ¯ÁÁµÄ½çÃæ×ÜÊÇ»áÁîÈËÉÍÐÄÔÃÄ¿µÄ¡£µ«ÊǺܿÉϧ£¬ÔÚÕâÀïûÓмÓÈëÕâЩ¹¦ÄÜ¡£ÕâºÜÈÝÒ×½âÊÍ£¬¶ÔÓÚËùÌṩµÄÕâ¸ö¼òµ¥Ê¾Àý³ÌÐò¶øÑÔ£¬¼ÓÈëGUIÌØÐÔ£¬ÊÇÓе㱾ĩµ¹Öõġ£Õ⽫»áʹ³ÌÐòµÄ´úÂëÁ¿ÖèÈ»¼ä¼±¾çÅòÕÍ£¬¶øÕæÕý¿ÉÒÔ˵Ã÷ÎÊÌâµÄºËÐIJ¿·ÖÈ·±»ÑÍûÔÚÖî¶àÎ޹ؽôÒªµÄ´úÂëÖм䣨ÄãÐèÒª»¨È¥¼«´óµÄ¾«Á¦À´´¦Àí¼üÅÌ»òÕßÊó±êµÄÏûÏ¢ÏìÓ¦ÕâЩ·±Ëö¶øÓÖ½ÏΪ¹æ·¶µÄÊÂÇ飩¡£¼´Ê¹ÄãÓÐÏñBorland C++ BuilderÕâÑùµÄ»ùÓÚIDE£¨¼¯³É»¯¿ª·¢»·¾³£©µÄ¹¤¾ß£¬½çÃæµÄ´¦Àí±äµÃ½ÏΪ¼òµ¥ÁË£¨¿ò¼Ü´úÂëÊÇ×Ô¶¯Éú³ÉµÄ£©¡£Çë×¢Ò⣬ÎÒÃÇÕâÀïËù̸¼°µÄÊÇÊôÓÚC++±ê×¼µÄÒ»²¿·Ö£¨STLµÄµÚÒ»¸ö×Öĸ˵Ã÷ÁËÕâÒ»µã£©£¬Ëü²»Éæ¼°¾ßÌåµÄij¸ö¿ª·¢¹¤¾ß£¬ËüÊǼ¸ºõÔÚÈκÎC++±àÒëÆ÷É϶¼ÄܱàÒëͨ¹ýµÄ´úÂë¡£±Ï¾¹£¬ÔÚMicrosoft Visual C++ºÍBorland C++ BuilderÀÓйØGUIµÄ´¦Àí´úÂëÊDz»Ò»ÑùµÄ¡£Èç¹ûÄãÏëÁ˽âÕâЩGUIµÄϸ½Ú£¬ÕâÀï¿ÖÅÂûÓÐÄãÏ£ÍûµÃµ½µÄ´ð°¸£¬Äã¿ÉÒÔѰÕÒÆäËüÏà¹ØÊé¼®¡£

2.2.1 µÚÒ»°æ£ºÊ·Ç°Ê±´ú--תľȡ»ð

ÔÚSTL»¹Ã»ÓнµÉúµÄ"ºÚ°µÊ±´ú"£¬C++³ÌÐòÔ±ÒªÍê³ÉÇ°ÃæËùÌáµ½µÄÄÇЩ¹¦ÄÜ£¬ÐèÒª×öºÜ¶àÊÂÇ飨²»¹ýÕâ±ÈÆðC³ÌÐòÀ´£¬ËƺõºÃÒ»µã£©£¬³ÌÐò´óÖÂÊÇÈçÏÂÕâ¸öÑù×ӵģº

// name:example2_1.cpp
// alias:Rubish

#include <stdlib.h>
#include <iostream.h>

int compare(const void *arg1, const void *arg2);

void main(void)
{
const int max_size = 10; // Êý×éÔÊÐíÔªËØµÄ×î´ó¸öÊý
int num[max_size]; // ÕûÐÍÊý×é

// ´Ó±ê×¼ÊäÈëÉ豸¶ÁÈëÕûÊý£¬Í¬Ê±ÀÛ¼ÆÊäÈë¸öÊý£¬
// Ö±µ½ÊäÈëµÄÊÇ·ÇÕûÐÍÊý¾ÝΪֹ
int n;
for (n = 0; cin >> num[n]; n ++);

// C±ê×¼¿âÖеĿìËÙÅÅÐò£¨quick-sort£©º¯Êý
qsort(num, n, sizeof(int), compare);

// ½«ÅÅÐò½á¹ûÊä³öµ½±ê×¼Êä³öÉ豸
for (int i = 0; i < n; i ++)
cout << num[i] << "\n";
}

// ±È½ÏÁ½¸öÊýµÄ´óС£¬
// Èç¹û*(int *)arg1±È*(int *)arg2С£¬Ôò·µ»Ø-1
// Èç¹û*(int *)arg1±È*(int *)arg2´ó£¬Ôò·µ»Ø1
// Èç¹û*(int *)arg1µÈÓÚ*(int *)arg2£¬Ôò·µ»Ø0
int compare(const void *arg1, const void *arg2)
{
return (*(int *)arg1 < *(int *)arg2) ? -1 :
(*(int *)arg1 > *(int *)arg2) ? 1 : 0;
}

ÕâÊÇÒ»¸öºÍSTLûÓÐË¿ºÁ¹ØÏµµÄ´«Í³·ç¸ñµÄC++³ÌÐò¡£ÒòΪ³ÌÐòµÄ×¢ÊÍÒѾ­ºÜÏ꾡ÁË£¬ËùÒÔ²»ÐèÒªÎÒÔÙ×ö¸ü¶àµÄ½âÊÍ¡£×ܵÄ˵À´£¬Õâ¸ö³ÌÐò¿´ÆðÀ´²¢²»Ê®·Ö¸´ÔÓ£¨±¾À´¾ÍûÓÐÌ«¶à¹¦ÄÜ£©¡£Ö»ÊÇ£¬ÄǸöcompareº¯Êý£¬¿´ÆðÀ´Óеã·Ñ¾¢¡£Ö¸ÏòËüµÄº¯ÊýÖ¸Õë±»×÷Ϊ×îºóÒ»¸öʵ²Î´«Èëqsortº¯Êý£¬qsortÊÇC³ÌÐò¿âstdlib.hÖеÄÒ»¸öº¯Êý¡£ÒÔÏÂÊÇqsortµÄº¯ÊýÔ­ÐÍ£º

void qsort(void *base, size_t num, size_t width, int 
    (__cdecl *compare )(const void *elem1, const void *elem2  ) ); 

¿´ÆðÀ´ÓеãÁîÈË×÷Å»£¬ÓÈÆäÊÇ×îºóÒ»¸ö²ÎÊý¡£´ó¸ÅµÄÒâ˼ÊÇ£¬µÚÒ»¸ö²ÎÊýÖ¸Ã÷ÁËÒªÅÅÐòµÄÊý×飨±ÈÈ磺³ÌÐòÖеÄnum£©£¬µÚ¶þ¸ö²ÎÊý¸ø³öÁËÊý×éµÄ´óС£¨qsortûÓÐ×ã¹»µÄÖÇÁ¦Ô¤ÖªÄã´«¸øËüµÄÊý×éµÄʵ¼Ê´óС£©£¬µÚÈý¸ö²ÎÊý¸ø³öÁËÊý×éÖÐÿ¸öÔªËØÒÔ×Ö½ÚΪµ¥Î»µÄ´óС¡£×îºóÄǸö³¤³¤µÄ¼Ò»ï£¬¸ø³öÁËÅÅÐòʱ±È½ÏÔªËØµÄ·½Ê½£¨»¹ÊÇÒòΪqsortµÄÖÇÉÌÎÊÌ⣩¡£

ÒÔÏÂÊÇij´ÎÔËÐеĽá¹û£º

ÊäÈ룺0 9 2 1 5

Êä³ö£º0 1 2 5 9

ÓÐÒ»¸öÎÊÌ⣬Õâ¸ö³ÌÐò²¢²»Ïñ¿´ÆðÀ´ÄÇô½¡×³£¨Robust£©¡£Èç¹ûÎÒÃÇÊäÈëµÄÊý×Ö¸öÊý³¬¹ýmax_sizeËù¹æ¶¨µÄÉÏÏÞ£¬¾Í»á³öÏÖÊý×éÔ½½çÎÊÌâ¡£Èç¹ûÄãÔÚVisual C++µÄIDE»·¾³ÏÂÒÔ¿ØÖÆÌ¨·½Ê½ÔËÐÐÕâ¸ö³ÌÐòʱ£¬»áµ¯³ö·Ç·¨ÄÚ´æ·ÃÎʵĴíÎó¶Ô»°¿ò¡£

Õâ¸öÎÊÌâºÜÑÏÖØ£¬ÑÏÖØµ½×ãÒÔʹÄã¿ªÊ¼ÖØÐÂÉóÊÓÕâ¸ö³ÌÐòµÄ´úÂ롣ΪÁËÃÖ²¹³ÌÐòÖеÄÕâһȱÏÝ¡£ÎÒÃDz»µÃ²»¿¼ÂDzÉÓÃÈçÏÂÈýÖÖ·½°¸ÖеÄÒ»ÖÖ£º

²ÉÓôóÈÝÁ¿µÄ¾²Ì¬Êý×é·ÖÅä¡£

ÏÞ¶¨ÊäÈëµÄÊý¾Ý¸öÊý¡£

²ÉÓö¯Ì¬ÄÚ´æ·ÖÅä¡£

µÚÒ»ÖÖ·½°¸±È½Ï¼òµ¥£¬ÄãËù×öµÄÖ»Êǽ«max_size¸Ä´óÒ»µã£¬±ÈÈ磺1000»òÕß10000¡£µ«ÊÇ£¬Ñϸñ½²Õâ²¢²»ÄÜ×îÖÕ½â¾öÎÊÌ⣬Òþ»¼ÈÔÈ»´æÔÚ¡£¼ÙÈçÓÐÈË×ã¹»ÄÍÐÄ£¬»¹ÊÇ¿ÉÒÔʹÄãµÄÕâ¸ö¾­¹ý¾ÀÕýºóµÄ³ÌÐò±ÀÀ£µÄ¡£´ËÍ⣬·ÖÅäÒ»¸ö´óÊý×飬ͨ³£ÊÇÔÚÀ˷ѿռ䣬ÒòΪ´ó¶àÊýÇé¿öÏ£¬Êý×éÖеÄÒ»²¿·Ö¿Õ¼ä²¢Ã»Óб»ÀûÓá£

ÔÙÀ´¿´¿´µÚ¶þÖÖ·½°¸£¬Í¨¹ýÔÚµÚÒ»¸öforÑ­»·ÖмÓÈëÒ»¸öÏÞ¶¨Ìõ¼þ£¬¿ÉÒÔʹÎÊÌâµÃµ½½â¾ö¡£±ÈÈ磺for (int n = 0; cin >> num[n] && n < max_size; n ++); µ«ÊÇÕâ¸ö·½°¸Í¬Ñù²»ÉõÀíÏ룬¾¡¹Ü²»»áʹ³ÌÐò±ÀÀ££¬µ«Ê§È¥ÁËÁé»îÐÔ£¬ÄãÎÞ·¨ÊäÈë¸ü¶àµÄÊý¡£

¿´À´Ö»ÓÐÑ¡ÔñµÚÈýÖÖ·½°¸ÁË¡£Êǵģ¬Äã¿ÉÒÔÀûÓÃÖ¸Õ룬ÒÔ¼°¶¯Ì¬ÄÚ´æ·ÖÅäÍ×ÉÆµÄ½â¾öÉÏÊöÎÊÌ⣬²¢ÇÒʹ³ÌÐò¾ßÓÐÁ¼ºÃµÄÁé»îÐÔ¡£ÕâÐèÒªÓõ½new£¬delete²Ù×÷·û£¬»òÕß¹ÅÀϵÄmalloc()£¬realloc()ºÍfree()º¯Êý¡£µ«ÊÇΪ´Ë£¬Ä㽫ÎþÉü³ÌÐòµÄ¼ò½àÐÔ£¬Ê¹³ÌÐò´úÂ붸Ôö£¬´úÂëµÄ´¦ÀíÂß¼­Ò²²»ÔÙÏñÔ­ÏÈ¿´ÆðÀ´ÄÇôÇåÎúÁË¡£Ò»¸öcompareº¯Êý»òÐí¾ÍÒѾ­ÁîÄã²»ÄÍ·³ÁË£¬¸üºÎ¿öҪʵÏÖÕâЩ¸´ÔӵĴ¦Àí»úÖÆÄØ£¿ºÜÄѱ£Ö¤Äã²»»áÔÚ´¦ÀíÕâ¸öÎÊÌâµÄʱºò³ö´í£¬ºÜ¶à³ÌÐòµÄbugÍùÍù¾ÍÊÇÕâÑù²úÉúµÄ¡£Í¬Ê±£¬Ä㻹Ӧ¸Ã¸Ðлstdlib.h£¬ËüΪÄãÌṩÁËqsortº¯Êý£¬·ñÔò£¬Ä㻹ÐèÒª×Ô¼ºÊµÏÖÅÅÐòËã·¨¡£Èç¹ûÄãÓõÄÊÇðÅÝ·¨ÅÅÐò£¬ÄÇЧÂʾͲ»»áºÜÀíÏë¡£¡­¡­£¬ÎÊÌâÕæÊÇÔ½À´Ô½ÈÃÈËÍ·ÌÛÁË£¡

¹ØÓÚµÚÒ»¸ö³ÌÐòµÄÌÖÂ۾͵½´ËΪֹ£¬Èç¹ûÄã¶ÔµÚÈýÖÖ·½°¸¸ÐÐËȤµÄ»°£¬¿ÉÒÔ³¢ÊÔ×Å×Ô¼º±àдһ¸ö³ÌÐò£¬×÷Ϊ˼¿¼Ìâ¡£ÕâÀï¾Í²»×¼±¸ÔÙÀ˷ѱÊīȥʵÏÖÕâÑùÒ»¸öÈÃÈ˲»ÉõÓä¿ìµÄ³ÌÐòÁË¡£

2.2.2 µÚ¶þ°æ£º¹¤ÒµÊ±´ú--×é¼þ»¯´óÉú²ú

ÎÒÃÇÓ¦¸ÃÇìÐÒ×Ô¼ºËùÉú»îµÄÄê´ú¡£¹¤ÒµÊ±´ú£¬¿Æ¼¼µÄ·¢Õ¹Ëù´øÀ´µÄ¾Þ´ó±ãÀûÒѾ­Ó°Ïìµ½ÁËÎÒÃÇÉú»îÖеÄÿ¸öϸ½Ú¡£Èç¹ûÄ㻹ÔÚÒÔԭʼÈËÀàµÄ·½Ê½Éú»î×Å£¬ÄÇÎÒÕæ¸Ã»³ÒÉÄãÊÇ·ñÊôÓÚij¸öÉú»îÔÚ·ÇÖÞ»òÕßÄÏÃÀ´ÔÁÖÀïµÄԭʼ²¿ÂäÖеÄÒ»Ô±ÁË£¬ÄѵÀÊÇÂêÑÅÎÄÃ÷ÓÖÖØÏÖÁË£¿

STL±ãÊÇÕâ¸öʱ´úµÄ²úÎÕýÈçÆäËû¿Æ¼¼³É¹ûÒ»Ñù£¬C++³ÌÐòÔ±Ò²Ó¦¸ÃŬÁ¦Ê¹×Ô¼ºÊÊÓ¦²¢³ä·ÖÀûÓÃÕâ¸ö"¸ß¿Æ¼¼³É¹û"¡£ÈÃÎÒÃÇÖØÐÂÉóÊÓµÚÒ»°æµÄÄǸöÆÆÀò»¿°µÄ³ÌÐò¡£ÊÔ×ÅʹÓÃÒ»ÏÂSTL£¬¿´¿´Ð§¹ûÈçºÎ¡£

// name:example2_2.cpp
// alias:The first STL program

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void main(void)
{
vector<int> num; // STLÖеÄvectorÈÝÆ÷
int element;

// ´Ó±ê×¼ÊäÈëÉ豸¶ÁÈëÕûÊý£¬
// Ö±µ½ÊäÈëµÄÊÇ·ÇÕûÐÍÊý¾ÝΪֹ
while (cin >> element)
num.push_back(element);

// STLÖеÄÅÅÐòËã·¨
sort(num.begin(), num.end());

// ½«ÅÅÐò½á¹ûÊä³öµ½±ê×¼Êä³öÉ豸
for (int i = 0; i < num.size(); i ++)
cout << num[i] << "\n";
}

Õâ¸ö³ÌÐòµÄÖ÷Òª²¿·Ö¸ÄÓÃÁËSTLµÄ²¿¼þ£¬¿´ÆðÀ´Òª±ÈµÚÒ»¸ö³ÌÐò¼ò½àÒ»µã£¬ÄãÒѾ­ÕÒ²»µ½ÄǸöÌÖÑáµÄcompareº¯ÊýÁË¡£ËüÕæµÄÄܺܺõÄÔËÐÐÂð£¿Äã¿ÉÒÔÊÔÊÔ£¬ÒòΪ³ÌÐòµÄÔËÐнá¹ûºÍÇ°ÃæµÄ´óÖ²¶à£¬ËùÒÔÔÚ´ËÂÔÈ¥¡£ÎÒ¿ÉÒÔÏòÄã±£Ö¤£¬Õâ¸ö³ÌÐòÊÇ×ã¹»½¡×³µÄ¡£²»¹ý£¬¿ÉÄÜÄ㻹ûÓÐÍêÈ«¿´Ã÷°×³ÌÐòµÄ´úÂ룬ËùÒÔÎÒÐèҪΪÄã½âÊÍһϡ£±Ï¾¹£¬Õâ¸öÏ··¨±äµÃÌ«¿ìÁË£¬½ÏÖ®µÚÒ»¸ö³ÌÐò£¬Ò»Õ£Ñ۵Ŧ·ò£¬ÄÇЩÀϵÄC++³ÌÐòÔ±ËùÊìϤµÄ´úÂë¶¼²»¼ûÁË£¬È¡¶ø´úÖ®µÄÊÇһЩÐÂÏÊÍæÒâ¶ù¡£

³ÌÐòµÄǰÈýÐÐÊǰüº¬µÄÍ·Îļþ£¬ËüÃÇÌṩÁ˳ÌÐòËùÒªÓõ½µÄËùÓÐC++ÌØÐÔ£¨°üÀ¨ÊäÈëÊä³ö´¦Àí£¬STLÖеÄÈÝÆ÷ºÍËã·¨£©¡£²»±ØÔÚÒâÄǸö.h£¬²¢²»ÊÇÎÒµÄÊèºö£¬³ÌÐò±£Ö¤¿ÉÒÔ±àÒëͨ¹ý£¬Ö»ÒªÄãµÄC++±àÒëÆ÷Ö§³Ö±ê×¼C++¹æ·¶µÄÏà¹Ø²¿·Ö¡£ÄãÖ»ÐèÒª°ÑËüÃÇ¿´×÷ÊÇһЩÆÕͨµÄC++Í·Îļþ¾Í¿ÉÒÔÁË¡£ÊÂʵÉÏ£¬Ò²ÕýÊÇÈç´Ë£¬Èç¹ûÄã¶ÔÕâ¸ö±ä»¯Ï¸½Ú¸ÐÐËȤµÄ»¯£¬¿ÉÒÔÁôÒâÒ»ÏÂÄãÉíÅÔµÄ×ô²Í¡£

ͬÑù¿ÉÒÔºöÂÔµÚËÄÐеĴæÔÚ¡£¼ÓÈëÄǸöÉùÃ÷Ö»ÊÇΪÁ˱íÃ÷³ÌÐòÒýÓõ½ÁËstdÕâ¸ö±ê×¼Ãû×ֿռ䣨namespace£©£¬ÒòΪSTLÖеÄÄÇÐ©ÍæÒâ¶ùÈ«¶¼°üº¬ÔÚÄÇÀïÃæ¡£Ö»ÓÐͨ¹ýÕâÐÐÉùÃ÷£¬±àÒëÆ÷²ÅÄÜÔÊÐíÄãʹÓÃÄÇЩÓÐȤµÄÌØÐÔ¡£

³ÌÐòÖÐÓõ½ÁËvector£¬ËüÊÇSTLÖеÄÒ»¸ö±ê×¼ÈÝÆ÷£¬¿ÉÒÔÓÃÀ´´æ·ÅÒ»Ð©ÔªËØ¡£Äã¿ÉÒÔ°ÑvectorÀí½âΪint [?]£¬Ò»¸öÕûÐ͵ÄÊý×é¡£Ö®ËùÒÔ´óСδ֪ÊÇÒòΪ£¬vectorÊÇÒ»¸ö¿ÉÒÔ¶¯Ì¬µ÷Õû´óСµÄÈÝÆ÷£¬µ±ÈÝÆ÷ÒÑÂúʱ£¬Èç¹ûÔÙ·ÅÈëÔªËØÔòvector»áÇÄÇÄÀ©´ó×Ô¼ºµÄÈÝÁ¿¡£push_backÊÇvectorÈÝÆ÷µÄÒ»¸öÀàÊô³ÉÔ±º¯Êý£¬ÓÃÀ´ÔÚÈÝÆ÷β¶Ë²åÈëÒ»¸öÔªËØ¡£mainº¯ÊýÖеÚÒ»¸öwhileÑ­»·×öµÄÊÂÇé¾ÍÊDz»¶ÏÏòvectorÈÝÆ÷β¶Ë²åÈëÕûÐÍÊý¾Ý£¬Í¬Ê±×Ô¶¯Î¬»¤ÈÝÆ÷¿Õ¼äµÄ´óС¡£

sortÊÇSTLÖеıê×¼Ëã·¨£¬ÓÃÀ´¶ÔÈÝÆ÷ÖеÄÔªËØ½øÐÐÅÅÐò¡£ËüÐèÒªÁ½¸ö²ÎÊýÓÃÀ´¾ö¶¨ÈÝÆ÷ÖÐÄĸö·¶Î§ÄÚµÄÔªËØ¿ÉÒÔÓÃÀ´ÅÅÐò¡£ÕâÀïÓõ½ÁËvectorµÄÁíÁ½¸öÀàÊô³ÉÔ±º¯Êý¡£begin()ÓÃÒÔÖ¸ÏòvectorµÄÊ×¶Ë£¬¶øend()ÔòÖ¸ÏòvectorµÄÄ©¶Ë¡£ÕâÀïÓÐÁ½¸öÎÊÌ⣬begin()ºÍend()µÄ·µ»ØÖµÊÇʲô£¿ÕâÉæ¼°µ½STLµÄÁíÒ»¸öÖØÒª²¿¼þ--µü´úÆ÷£¨Iterator£©£¬²»¹ýÕâÀï²¢²»ÐèÒª¶ÔËü×öÏêϸÁ˽⡣ÄãÖ»ÐèÒª°ÑËüµ±×÷ÊÇÒ»¸öÖ¸Õë¾Í¿ÉÒÔÁË£¬Ò»¸öÖ¸ÏòÕûÐÍÊý¾ÝµÄÖ¸Õë¡£ÏàÓ¦µÄsortº¯ÊýÉùÃ÷Ò²¿ÉÒÔ¿´×÷ÊÇvoid sort(int* first, int* last)£¬¾¡¹ÜÕâʵ¼ÊÉϺܲ»¾«È·¡£ÁíÒ»¸öÎÊÌâÊǺÍend()º¯ÊýÓйأ¬¾¡¹ÜÇ°ÃæËµËüµÄ·µ»ØÖµÖ¸ÏòvectorµÄÄ©¶Ë£¬µ«ÕâÖÖ˵·¨²»ÄÜËãÕýÈ·¡£ÊÂʵÉÏ£¬ËüµÄ·µ»ØÖµËùÖ¸ÏòµÄÊÇvectorÖÐ×îÄ©¶ËÔªËØµÄºóÃæÒ»¸öλÖ㬼´Ëùνpass-the-end value¡£ÕâÌýÆðÀ´Óеã·Ñ½â£¬²»¹ý²»±ØÔÚÒ⣬ÕâÀïÖ»ÊÇÉÔ´øÒ»Ìá¡£×ܵÄÀ´Ëµ£¬sortº¯ÊýËù×öµÄÊÂÇéÊǶÔÄǸö×¼ÕûÐÍÊý×éÖеÄÔªËØ½øÐÐÅÅÐò£¬Ò»ÈçµÚÒ»¸ö³ÌÐòÖеÄÄǸöqsort£¬²»¹ý±ÈÆðqsortÀ´£¬sortËÆºõÒª¼òµ¥ÁËÐí¶à¡£

³ÌÐòµÄ×îºóÊÇÊä³ö²¿·Ö£¬ÔÚÕâÀïvectorÍêÈ«¿ÉÒÔÒÔ¼ÙÂÒÕæÁË£¬ËüËùÌṩµÄ¶ÔÔªËØµÄ·ÃÎÊ·½Ê½¼òÖ±ºÍÆÕͨµÄC++ÄÚ½¨Êý×éһģһÑù¡£ÄǸösizeº¯ÊýÓÃÀ´·µ»ØvectorÖеÄÔªËØ¸öÊý£¬¾ÍÏ൱ÓÚµÚÒ»¸ö³ÌÐòÖеıäÁ¿n¡£ÕâÁ½ÐдúÂëÖ±¹ÛµÄ²»ÓÃÎÒÔÙ¶à½âÊÍÁË¡£

ÎÒÏëÎÒµÄÄÍÐĽ²½âÓ¦¸Ã¿ÉÒÔʹÄã´óÖ¿´¶®ÉÏÃæµÄ³ÌÐòÁË£¬ÊÂʵÉÏSTLµÄÔËÓÃʹ³ÌÐòµÄÂß¼­¸ü¼ÓÇåÎú£¬Ê¹´úÂë¸üÒ×ÓÚÔĶÁ¡£ÊÔÎÊ£¬ÓÐË­»á²»Ã÷°×begin¡¢end¡¢sizeÕâÑùµÄ×ÖÑÛËù±í´ïµÄº¬ÒåÄØ£¨³ý·ÇËû²»¶®Ó¢Ó£¿ÊÔ×ÅÔËÐÐһϣ¬¿´¿´Ð§¹û¡£ÔÙÊÔ×ŶàÊäÈ뼸¸öÊý£¬¿´¿´ÊÇ·ñ»á·¢ÉúÊý×éÔ½½çÏÖÏó¡£Êµ¼ùÖ¤Ã÷£¬³ÌÐòÔËÐÐÁ¼ºÃ¡£Êǵģ¬ÓÉÓÚvectorÈÝÆ÷×ÔÐÐά»¤ÁË×ÔÉíµÄ´óС£¬C++³ÌÐòÔ±¾Í²»ÓòÙÐĶ¯Ì¬ÄÚ´æ·ÖÅäÁË£¬Ö¸ÕëµÄ´íÎóʹÓñϾ¹»á´øÀ´ºÜ¶àÂé·³£¬Í¬Ê±³ÌÐòÒ²»á±äµÃÈß³¤Îޱȡ£ÕâÕýÊÇÇ°ÃæµÚÈýÖÖ·½°¸µÄȱµãËùÔÚ¡£

ÔÙ×ÐϸÉóÊÓÒ»ÏÂÄãµÄµÚÒ»¸öSTL°æµÄC++³ÌÐò£¬»Ø¹ËһϵÚÒ»ÕÂËùÌáµ½µÄÄÇЩÓйØSTLµÄÓŵ㣺Ò×ÓÚʹÓ㬾ßÓй¤ÒµÇ¿¶È¡­¡­£¬ÔٱȽÏһϵÚÒ»°æµÄ³ÌÐò£¬ÎÒÏëÄãÓ¦¸ÃÓÐËùÌå»áÁ˰ɣ¡

2.2.3 µÚÈý°æ£ºÎ¨ÃÀÖ÷ÒåµÄ½Ü×÷

ÊÂ̬µÄ·¢Õ¹ÓÐʱºò×Ü»áÇ÷Ïò¼«¶Ë£¬ÕâÔÚÄÇЩΨÃÀÖ÷ÒåÕßµ±ÖÐÓÌÊÇÈç´Ë¡£Ê×ÏÈÉùÃ÷£¬ÎÒ²¢²»ÊÇÒ»¸öΨÃÀÖ÷ÒåÕߣ¬ÌṩµÚ¶þ°æ³ÌÐòµÄ¸Ä½ø°æ£¬ÍêÈ«ÊÇΪÁËÈÃÄã¸üÉî¿ÌµÄ¸ÐÊܵ½STLµÄ÷ÈÁ¦ËùÔÚ¡£ÔÚ¿´ÍêµÚÈý°æÖ®ºó£¬Äã»áÇ¿ÁÒ¸ÐÊܵ½ÕâÒ»µã¡£»òÐíÄãÒ²»á±ä³ÉÒ»¸öΨÃÀÖ÷ÒåÕßÁË£¬ÖÁÉÙÔÚSTL·½Ãæ¡£ÕâÓ¦¸Ã²»ÊÇÎÒµÄ´í£¬ÒòΪ¾ö¶¨È¨ÔÚÄãÊÖÀï¡£ÏÂÃæÎÒÃÇÀ´¿´¿´Õâ¸ö¾ø°æµÄC++³ÌÐò¡£

// name:example2_3.cpp
// alias:aesthetic version

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;

// STLÖеÄvectorÈÝÆ÷
int_vector num;

// ´Ó±ê×¼ÊäÈëÉ豸¶ÁÈëÕûÊý£¬
// Ö±µ½ÊäÈëµÄÊÇ·ÇÕûÐÍÊý¾ÝΪֹ
copy(istream_itr(cin), istream_itr(), back_ins_itr(num));

// STLÖеÄÅÅÐòËã·¨
sort(num.begin(), num.end());

// ½«ÅÅÐò½á¹ûÊä³öµ½±ê×¼Êä³öÉ豸
copy(num.begin(), num.end(), ostream_itr(cout, "\n"));
}

ÔÚÕâ¸ö³ÌÐòÀXºõÿÐдúÂë¶¼ÊǺÍSTLÓйص썳ýÁËmainºÍÄǶԻ¨À¨ºÅ£¬µ±È»»¹ÓÐ×¢ÊÍ£©£¬²¢ÇÒËü°üº¬ÁËSTLÖм¸ºõËùÓеĸ÷´ó²¿¼þ£¨ÈÝÆ÷container£¬µü´úÆ÷iterator, Ëã·¨algorithm, ÊÊÅäÆ÷adaptor£©£¬Î¨Ò»µÄÒź¶ÊÇÉÙÁ˺¯Êý¶ÔÏó£¨functor£©µÄÉíÓ°¡£

»¹¼ÇµÃ¿ªÍ·Ìáµ½µÄÒ»¸öµäÐÍϵͳËù¾ßÓеĻù±¾ÌØÕ÷Âð£¿--ÊäÈë+´¦Àí+Êä³ö¡£ËùÓÐÕâЩ¹¦ÄÜ£¬ÔÚÉÏÃæµÄ³ÌÐòÀ½ö½öÊÇͨ¹ýÈýÐÐÓï¾äÀ´ÊµÏֵ쬯äÖÐÿһÐÐÓï¾ä¶ÔÓ¦Ò»ÖÖ²Ù×÷¡£¶ÔÓÚÊý¾ÝµÄ²Ù×÷±»¸ß¶ÈµÄ³éÏó»¯ÁË£¬¶øËã·¨ºÍÈÝÆ÷Ö®¼äµÄ×éºÏ£¬¾ÍÏñ´î»ýľһÑùÇáËÉ×ÔÈ磬ϵͳµÄñîºÏ¶È±»½µµ½Á˼«µÍµã¡£Õâ¾ÍÊÇÉÁÒ«×Å·ºÐÍÖ®¹âµÄSTLµÄΰ´óÁ¦Á¿¡£Èç´Ë¼ò½à£¬Èç´ËÇÉÃÈç´ËÉñÆæ£¡¾ÍÏñħÊõÒ»°ã£¬ÒÔÖÁÓÚÔÙÒ»´ÎÈÃÄãÃþ²»×ÅÍ·ÄÔ¡£ÔõôʵÏֵģ¿ÎªÊ²Ã´ÔÚ¿´µÚ¶þ°æ³ÌÐòµÄʱºòÈç´ËÇåÎúµÄÄ㣬ÓÖ×¹ÈëÁËÎåÀïÎíÖУ¨ÇÔϲ£©¡£

ÇëÁôÒâ´Ë´¦µÄ±êÌ⣨ΨÃÀÖ÷ÒåµÄ½Ü×÷£©£¬ÔÚʵ¼Ê»·¾³ÖУ¬Äãδ±ØÒª×öµ½ÕâÑùÍêÃÀ¡£±Ï¾¹ÃÀºÃÔ¸ÍûµÄÆÆÃð£¬ÔÚÉú»îÖÐʱ³£»á·¢Éú¡£¹ýÓÚÀíÏ뻯£¬²¢²»ÊÇÒ»¼þºÃÊ£¬ÖÁÉÙÎÒÊÇÕâôÈÏΪµÄ¡£ÕýÈçÇ°ÃæÌáµ½µÄ£¬Õâ¸ö³ÌÐòÖ»ÊÇΪÁËչʾSTLµÄ¶ÀÌØ÷ÈÁ¦£¬Äã²»µÃ²»ÎªËüµÄ³öÉ«±íÏÖËùÕÛ·þ£¬Ò²ÐíÖ»ÓÐÉîÚÏSTLÖ®µÀµÄÈ˲ŻáÏë³öÕâÑùµÄÍæÒâ¶ùÀ´¡£Èç¹ûÄãÖ»ÊÇÒ»°ãÐÔµÄʹÓÃSTL£¬×öµ½µÚ¶þ°æÕâÑùµÄ³Ì¶ÈÒ²¾Í¿ÉÒÔÁË¡£

ʵÔÚÊÇÒòΪÕâ¸ö³ÌÐòÌ«¹ý"¼òµ¥"£¬ÒÔÖÁÓÚÎÒÎÞ·¨¿Ï¶¨£¬ÔÚÄ㻹ûÓÐÍêÈ«ÕÆÎÕSTL֮ǰ£¬Í¨¹ýÎҵĽ²½â£¬ÊÇ·ñÄܹ»Áì»áÕâÇøÇøÈýÐдúÂ룬ÎÒ½«¾¡ÎÒµÄ×î´óŬÁ¦¡£

Ç°ÃæÌáµ½µÄµü´úÆ÷¿ÉÒÔ¶ÔÈÝÆ÷ÄÚµÄÈÎÒâÔªËØ½øÐж¨Î»ºÍ·ÃÎÊ¡£ÔÚSTLÀÕâÖÖÌØÐÔ±»¼ÓÒÔÍÆ¹ãÁË¡£Ò»¸öcin´ú±íÁËÀ´×ÔÊäÈëÉ豸µÄÒ»¶ÎÊý¾ÝÁ÷£¬´Ó¸ÅÄîÉϽ²Ëü¶ÔÊý¾ÝÁ÷µÄ·ÃÎʹ¦ÄÜÀàËÆÓÚÒ»°ãÒâÒåÉϵĵü´úÆ÷£¬µ«ÊÇC++ÖеÄcinÔÚºÜ¶àµØ·½²Ù×÷ÆðÀ´²¢²»ÏñÊÇÒ»¸öµü´úÆ÷£¬Ô­Òò¾ÍÔÚÓÚÆä½Ó¿ÚºÍµü´úÆ÷µÄ½Ó¿Ú²»Ò»Ö£¨±ÈÈ磺²»ÄܶÔcin½øÐÐ++ÔËË㣬Ҳ²»ÄܶÔÖ®½øÐÐȡֵÔËËã--¼´*ÔËË㣩¡£ÎªÁ˽â¾öÕâ¸öì¶Ü£¬¾ÍÐèÒªÒýÈëÊÊÅäÆ÷µÄ¸ÅÄî¡£istream_iterator±ãÊÇÒ»¸öÊÊÅäÆ÷£¬Ëü½«cin½øÐаü×°£¬Ê¹Ö®¿´ÆðÀ´ÏñÊÇÒ»¸öÆÕͨµÄµü´úÆ÷£¬ÕâÑùÎÒÃǾͿÉÒÔ½«Ö®×÷Ϊʵ²Î´«¸øÒ»Ð©Ëã·¨ÁË£¨±ÈÈçÕâÀïµÄcopyËã·¨£©¡£ÒòΪËã·¨Ö»Èϵõü´úÆ÷£¬¶ø²»»á½ÓÊÜcin¡£¶ÔÓÚÉÏÃæ³ÌÐòÖеĵÚÒ»¸öcopyº¯Êý¶øÑÔ£¬ÆäµÚÒ»¸ö²ÎÊýÕ¹¿ªºóµÄÐÎʽÊÇ£ºistream_iterator(cin)£¬ÆäµÚ¶þ¸ö²ÎÊýÕ¹¿ªºóµÄÐÎʽÊÇ£ºistream_iterator()£¨Èç¹ûÄã¶ÔtypedefµÄÓï·¨²»Çå³þ£¬¿ÉÒԲο¼ÓйصÄc++ÓïÑÔÊé¼®£©¡£ÆäЧ¹ûÊDzúÉúÁ½¸öµü´úÆ÷µÄÁÙʱ¶ÔÏó£¬Ç°Ò»¸öÖ¸ÏòÕûÐÍÊäÈëÊý¾ÝÁ÷µÄ¿ªÊ¼£¬ºóÒ»¸öÔòÖ¸Ïò"pass-the-end value"¡£Õâ¸öº¯ÊýµÄ×÷ÓþÍÊǽ«ÕûÐÍÊäÈëÊý¾ÝÁ÷´ÓÍ·ÖÁβÖðÒ»"¿½±´"µ½vectorÕâ¸ö×¼ÕûÐÍÊý×éÀµÚÒ»¸öµü´úÆ÷´Ó¿ªÊ¼Î»ÖÃÿ´ÎÀÛ½ø£¬×îºóµ½´ïµÚ¶þ¸öµü´úÆ÷ËùÖ¸ÏòµÄλÖ᣻òÐíÄãÒªÎÊ£¬Èç¹ûÄǸöcopyº¯ÊýµÄÐÐÎªÕæÈçÎÒËù˵µÄÄÇÑù£¬ÎªÊ²Ã´²»Ð´³ÉÈçÏÂÕâ¸öÑù×ÓÄØ£¿

copy(istream_iterator<int>(cin), istream_iterator<int>(), num.begin());

Äãȷʵ¿ÉÒÔÕâô×ö£¬µ«ÊÇÓÐÒ»¸öССµÄÂé·³¡£»¹¼ÇµÃµÚÒ»°æ³ÌÐòÀïµÄÄǸöÊý×éÔ½½çÎÊÌâÂð£¿Èç¹ûÄãÕâôдµÄ»°£¬¾Í»áÓöµ½ÀàËÆµÄÂé·³¡£Ô­ÒòÔÚÓÚcopyº¯ÊýÔÚ"¿½±´"Êý¾ÝµÄʱºò£¬Èç¹ûÊäÈëµÄÊý¾Ý¸öÊý³¬¹ýÁËvectorÈÝÆ÷µÄ·¶Î§Ê±£¬Êý¾Ý½«»á¿½±´µ½ÈÝÆ÷µÄÍâÃæ¡£´Ëʱ£¬ÈÝÆ÷²»»á×Ô¶¯Ôö³¤ÈÝÁ¿£¬ÒòΪÕâÖ»ÊǼòµ¥µØ¿½±´£¬²¢²»ÊÇ´ÓÄ©¶Ë²åÈ롣ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÁíÒ»¸öÊÊÅäÆ÷back_insert_iteratorµÇ³¡ÁË£¬ËüµÄ×÷ÓþÍÊÇÒýµ¼copyË㷨ÿ´ÎÔÚÈÝÆ÷Ä©¶Ë²åÈëÒ»¸öÊý¾Ý¡£³ÌÐòÖеÄÄǸöback_ins_itr(num)Õ¹¿ªºó¾ÍÊÇ£ºback_insert_iterator(num)£¬ÆäЧ¹ûÊÇÉú³ÉÒ»¸öÕâÑùµÄµü´ýÆ÷¶ÔÏó¡£

ÖÕÓÚ½«½²ÍêÁËÈý·ÖÖ®Ò»£¨Õæ²»ÈÝÒ×£¡£©£¬ºÃÔÚµÚ¶þ¾äºÍǰһ°æ³ÌÐòûÓвî±ð£¬ÕâÀï¾ÍÂÔ¹ýÁË¡£ÖÁÓÚµÚÈý¾ä£¬ostream_itr(cout, "\n")Õ¹¿ªºóµÄÐÎʽÊÇ£ºostream_iterator(cout, "\n")£¬ÆäЧ¹ûÊDzúÉúÒ»¸ö´¦ÀíÊä³öÊý¾ÝÁ÷µÄµü´ýÆ÷¶ÔÏ󣬯äλÖÃÖ¸ÏòÊý¾ÝÁ÷µÄÆðʼ´¦£¬²¢ÇÒÒÔ"\n"×÷Ϊ·Ö¸î·û¡£µÚ¶þ¸öcopyº¯Êý½«»á´ÓÍ·ÖÁ⽫vectorÖеÄÄÚÈÝ"¿½±´"µ½Êä³öÉ豸£¬µÚÒ»¸ö²ÎÊýËù´ú±íµÄµü´úÆ÷½«»á´Ó¿ªÊ¼Î»ÖÃÿ´ÎÀÛ½ø£¬×îºóµ½´ïµÚ¶þ¸ö²ÎÊýËù´ú±íµÄµü´úÆ÷ËùÖ¸ÏòµÄλÖá£

Õâ¾ÍÊÇÈ«²¿µÄÄÚÈÝ¡£

2.3 ÀúÊ·µÄÆÀ¼Û

ÀúÊ·µÄ³µÂÖ×ÜÊǹö¹öÏòǰµÄ£¬¹¤ÒµÊ±´úµÄÎÄÃ÷½Ï֮ʷǰʱ´ú£¬µ±È»ÊÇÏȽø²¢ÇÒ·¢´ïµÄ¡£»Ø¹ËÄÇÁ½¸öʱ´úµÄC++³ÌÐò£¬Äã»áÕæÇеĸÐÊܵ½ÕâÖÖ²î±ð¡£¼ò½àÒ×Ó㬾ßÓй¤ÒµÇ¿¶È£¬½ÏºÃµÄ¿ÉÒÆÖ²ÐÔ£¬¸ßЧÂÊ£¬¼ÓÖ®µÚÈý¸öÁîÈËĿѣµÄ¾ø°æ³ÌÐòËùÌåÏÖ³öÀ´µÄ¸ß¶È³éÏóÐÔ£¬¸ß¶ÈÁé»îÐÔºÍ×é¼þ»¯ÌØÐÔ£¬Ê¹Äã¶ÔSTL±³ºóËùÔ̺¬µÄ·ºÐÍ»¯Ë¼Ïë¶¼ÓÐÁËЩ΢µÄ¸ÐÊÜ¡£

ÕæÐÒÔË£¬Äã¿ÉÒÔºá¿çÁ½¸öʱ´ú£¬Óлú»áÄ¿¶ÃÕâÖÖ"ÎÄÃ÷"µÄ²îÒ졣ͬʱ£¬ÕâÒ²Ó¦¸ÃʹÄãÔ½¼Ó¼á¶¨ÐÅÄʹ×Ô¼ºË³Ó¦Ê±´úµÄ³±Á÷¡£

2.2.3 µÚÈý°æ£ºÎ¨ÃÀÖ÷ÒåµÄ½Ü×÷

ÊÂ̬µÄ·¢Õ¹ÓÐʱºò×Ü»áÇ÷Ïò¼«¶Ë£¬ÕâÔÚÄÇЩΨÃÀÖ÷ÒåÕßµ±ÖÐÓÌÊÇÈç´Ë¡£Ê×ÏÈÉùÃ÷£¬ÎÒ²¢²»ÊÇÒ»¸öΨÃÀÖ÷ÒåÕߣ¬ÌṩµÚ¶þ°æ³ÌÐòµÄ¸Ä½ø°æ£¬ÍêÈ«ÊÇΪÁËÈÃÄã¸üÉî¿ÌµÄ¸ÐÊܵ½STLµÄ÷ÈÁ¦ËùÔÚ¡£ÔÚ¿´ÍêµÚÈý°æÖ®ºó£¬Äã»áÇ¿ÁÒ¸ÐÊܵ½ÕâÒ»µã¡£»òÐíÄãÒ²»á±ä³ÉÒ»¸öΨÃÀÖ÷ÒåÕßÁË£¬ÖÁÉÙÔÚSTL·½Ãæ¡£ÕâÓ¦¸Ã²»ÊÇÎÒµÄ´í£¬ÒòΪ¾ö¶¨È¨ÔÚÄãÊÖÀï¡£ÏÂÃæÎÒÃÇÀ´¿´¿´Õâ¸ö¾ø°æµÄC++³ÌÐò¡£

// name:example2_3.cpp
// alias:aesthetic version

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;

// STLÖеÄvectorÈÝÆ÷
int_vector num;

// ´Ó±ê×¼ÊäÈëÉ豸¶ÁÈëÕûÊý£¬
// Ö±µ½ÊäÈëµÄÊÇ·ÇÕûÐÍÊý¾ÝΪֹ
copy(istream_itr(cin), istream_itr(), back_ins_itr(num));

// STLÖеÄÅÅÐòËã·¨
sort(num.begin(), num.end());

// ½«ÅÅÐò½á¹ûÊä³öµ½±ê×¼Êä³öÉ豸
copy(num.begin(), num.end(), ostream_itr(cout, "\n"));
}

ÔÚÕâ¸ö³ÌÐòÀXºõÿÐдúÂë¶¼ÊǺÍSTLÓйص썳ýÁËmainºÍÄǶԻ¨À¨ºÅ£¬µ±È»»¹ÓÐ×¢ÊÍ£©£¬²¢ÇÒËü°üº¬ÁËSTLÖм¸ºõËùÓеĸ÷´ó²¿¼þ£¨ÈÝÆ÷container£¬µü´úÆ÷iterator, Ëã·¨algorithm, ÊÊÅäÆ÷adaptor£©£¬Î¨Ò»µÄÒź¶ÊÇÉÙÁ˺¯Êý¶ÔÏó£¨functor£©µÄÉíÓ°¡£

»¹¼ÇµÃ¿ªÍ·Ìáµ½µÄÒ»¸öµäÐÍϵͳËù¾ßÓеĻù±¾ÌØÕ÷Âð£¿--ÊäÈë+´¦Àí+Êä³ö¡£ËùÓÐÕâЩ¹¦ÄÜ£¬ÔÚÉÏÃæµÄ³ÌÐòÀ½ö½öÊÇͨ¹ýÈýÐÐÓï¾äÀ´ÊµÏֵ쬯äÖÐÿһÐÐÓï¾ä¶ÔÓ¦Ò»ÖÖ²Ù×÷¡£¶ÔÓÚÊý¾ÝµÄ²Ù×÷±»¸ß¶ÈµÄ³éÏó»¯ÁË£¬¶øËã·¨ºÍÈÝÆ÷Ö®¼äµÄ×éºÏ£¬¾ÍÏñ´î»ýľһÑùÇáËÉ×ÔÈ磬ϵͳµÄñîºÏ¶È±»½µµ½Á˼«µÍµã¡£Õâ¾ÍÊÇÉÁÒ«×Å·ºÐÍÖ®¹âµÄSTLµÄΰ´óÁ¦Á¿¡£Èç´Ë¼ò½à£¬Èç´ËÇÉÃÈç´ËÉñÆæ£¡¾ÍÏñħÊõÒ»°ã£¬ÒÔÖÁÓÚÔÙÒ»´ÎÈÃÄãÃþ²»×ÅÍ·ÄÔ¡£ÔõôʵÏֵģ¿ÎªÊ²Ã´ÔÚ¿´µÚ¶þ°æ³ÌÐòµÄʱºòÈç´ËÇåÎúµÄÄ㣬ÓÖ×¹ÈëÁËÎåÀïÎíÖУ¨ÇÔϲ£©¡£

ÇëÁôÒâ´Ë´¦µÄ±êÌ⣨ΨÃÀÖ÷ÒåµÄ½Ü×÷£©£¬ÔÚʵ¼Ê»·¾³ÖУ¬Äãδ±ØÒª×öµ½ÕâÑùÍêÃÀ¡£±Ï¾¹ÃÀºÃÔ¸ÍûµÄÆÆÃð£¬ÔÚÉú»îÖÐʱ³£»á·¢Éú¡£¹ýÓÚÀíÏ뻯£¬²¢²»ÊÇÒ»¼þºÃÊ£¬ÖÁÉÙÎÒÊÇÕâôÈÏΪµÄ¡£ÕýÈçÇ°ÃæÌáµ½µÄ£¬Õâ¸ö³ÌÐòÖ»ÊÇΪÁËչʾSTLµÄ¶ÀÌØ÷ÈÁ¦£¬Äã²»µÃ²»ÎªËüµÄ³öÉ«±íÏÖËùÕÛ·þ£¬Ò²ÐíÖ»ÓÐÉîÚÏSTLÖ®µÀµÄÈ˲ŻáÏë³öÕâÑùµÄÍæÒâ¶ùÀ´¡£Èç¹ûÄãÖ»ÊÇÒ»°ãÐÔµÄʹÓÃSTL£¬×öµ½µÚ¶þ°æÕâÑùµÄ³Ì¶ÈÒ²¾Í¿ÉÒÔÁË¡£

ʵÔÚÊÇÒòΪÕâ¸ö³ÌÐòÌ«¹ý"¼òµ¥"£¬ÒÔÖÁÓÚÎÒÎÞ·¨¿Ï¶¨£¬ÔÚÄ㻹ûÓÐÍêÈ«ÕÆÎÕSTL֮ǰ£¬Í¨¹ýÎҵĽ²½â£¬ÊÇ·ñÄܹ»Áì»áÕâÇøÇøÈýÐдúÂ룬ÎÒ½«¾¡ÎÒµÄ×î´óŬÁ¦¡£

Ç°ÃæÌáµ½µÄµü´úÆ÷¿ÉÒÔ¶ÔÈÝÆ÷ÄÚµÄÈÎÒâÔªËØ½øÐж¨Î»ºÍ·ÃÎÊ¡£ÔÚSTLÀÕâÖÖÌØÐÔ±»¼ÓÒÔÍÆ¹ãÁË¡£Ò»¸öcin´ú±íÁËÀ´×ÔÊäÈëÉ豸µÄÒ»¶ÎÊý¾ÝÁ÷£¬´Ó¸ÅÄîÉϽ²Ëü¶ÔÊý¾ÝÁ÷µÄ·ÃÎʹ¦ÄÜÀàËÆÓÚÒ»°ãÒâÒåÉϵĵü´úÆ÷£¬µ«ÊÇC++ÖеÄcinÔÚºÜ¶àµØ·½²Ù×÷ÆðÀ´²¢²»ÏñÊÇÒ»¸öµü´úÆ÷£¬Ô­Òò¾ÍÔÚÓÚÆä½Ó¿ÚºÍµü´úÆ÷µÄ½Ó¿Ú²»Ò»Ö£¨±ÈÈ磺²»ÄܶÔcin½øÐÐ++ÔËË㣬Ҳ²»ÄܶÔÖ®½øÐÐȡֵÔËËã--¼´*ÔËË㣩¡£ÎªÁ˽â¾öÕâ¸öì¶Ü£¬¾ÍÐèÒªÒýÈëÊÊÅäÆ÷µÄ¸ÅÄî¡£istream_iterator±ãÊÇÒ»¸öÊÊÅäÆ÷£¬Ëü½«cin½øÐаü×°£¬Ê¹Ö®¿´ÆðÀ´ÏñÊÇÒ»¸öÆÕͨµÄµü´úÆ÷£¬ÕâÑùÎÒÃǾͿÉÒÔ½«Ö®×÷Ϊʵ²Î´«¸øÒ»Ð©Ëã·¨ÁË£¨±ÈÈçÕâÀïµÄcopyËã·¨£©¡£ÒòΪËã·¨Ö»Èϵõü´úÆ÷£¬¶ø²»»á½ÓÊÜcin¡£¶ÔÓÚÉÏÃæ³ÌÐòÖеĵÚÒ»¸öcopyº¯Êý¶øÑÔ£¬ÆäµÚÒ»¸ö²ÎÊýÕ¹¿ªºóµÄÐÎʽÊÇ£ºistream_iterator(cin)£¬ÆäµÚ¶þ¸ö²ÎÊýÕ¹¿ªºóµÄÐÎʽÊÇ£ºistream_iterator()£¨Èç¹ûÄã¶ÔtypedefµÄÓï·¨²»Çå³þ£¬¿ÉÒԲο¼ÓйصÄc++ÓïÑÔÊé¼®£©¡£ÆäЧ¹ûÊDzúÉúÁ½¸öµü´úÆ÷µÄÁÙʱ¶ÔÏó£¬Ç°Ò»¸öÖ¸ÏòÕûÐÍÊäÈëÊý¾ÝÁ÷µÄ¿ªÊ¼£¬ºóÒ»¸öÔòÖ¸Ïò"pass-the-end value"¡£Õâ¸öº¯ÊýµÄ×÷ÓþÍÊǽ«ÕûÐÍÊäÈëÊý¾ÝÁ÷´ÓÍ·ÖÁβÖðÒ»"¿½±´"µ½vectorÕâ¸ö×¼ÕûÐÍÊý×éÀµÚÒ»¸öµü´úÆ÷´Ó¿ªÊ¼Î»ÖÃÿ´ÎÀÛ½ø£¬×îºóµ½´ïµÚ¶þ¸öµü´úÆ÷ËùÖ¸ÏòµÄλÖ᣻òÐíÄãÒªÎÊ£¬Èç¹ûÄǸöcopyº¯ÊýµÄÐÐÎªÕæÈçÎÒËù˵µÄÄÇÑù£¬ÎªÊ²Ã´²»Ð´³ÉÈçÏÂÕâ¸öÑù×ÓÄØ£¿

copy(istream_iterator<int>(cin), istream_iterator<int>(),  num.begin());

Äãȷʵ¿ÉÒÔÕâô×ö£¬µ«ÊÇÓÐÒ»¸öССµÄÂé·³¡£»¹¼ÇµÃµÚÒ»°æ³ÌÐòÀïµÄÄǸöÊý×éÔ½½çÎÊÌâÂð£¿Èç¹ûÄãÕâôдµÄ»°£¬¾Í»áÓöµ½ÀàËÆµÄÂé·³¡£Ô­ÒòÔÚÓÚcopyº¯ÊýÔÚ"¿½±´"Êý¾ÝµÄʱºò£¬Èç¹ûÊäÈëµÄÊý¾Ý¸öÊý³¬¹ýÁËvectorÈÝÆ÷µÄ·¶Î§Ê±£¬Êý¾Ý½«»á¿½±´µ½ÈÝÆ÷µÄÍâÃæ¡£´Ëʱ£¬ÈÝÆ÷²»»á×Ô¶¯Ôö³¤ÈÝÁ¿£¬ÒòΪÕâÖ»ÊǼòµ¥µØ¿½±´£¬²¢²»ÊÇ´ÓÄ©¶Ë²åÈ롣ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÁíÒ»¸öÊÊÅäÆ÷back_insert_iteratorµÇ³¡ÁË£¬ËüµÄ×÷ÓþÍÊÇÒýµ¼copyË㷨ÿ´ÎÔÚÈÝÆ÷Ä©¶Ë²åÈëÒ»¸öÊý¾Ý¡£³ÌÐòÖеÄÄǸöback_ins_itr(num)Õ¹¿ªºó¾ÍÊÇ£ºback_insert_iterator(num)£¬ÆäЧ¹ûÊÇÉú³ÉÒ»¸öÕâÑùµÄµü´ýÆ÷¶ÔÏó¡£

ÖÕÓÚ½«½²ÍêÁËÈý·ÖÖ®Ò»£¨Õæ²»ÈÝÒ×£¡£©£¬ºÃÔÚµÚ¶þ¾äºÍǰһ°æ³ÌÐòûÓвî±ð£¬ÕâÀï¾ÍÂÔ¹ýÁË¡£ÖÁÓÚµÚÈý¾ä£¬ostream_itr(cout, "\n")Õ¹¿ªºóµÄÐÎʽÊÇ£ºostream_iterator(cout, "\n")£¬ÆäЧ¹ûÊDzúÉúÒ»¸ö´¦ÀíÊä³öÊý¾ÝÁ÷µÄµü´ýÆ÷¶ÔÏ󣬯äλÖÃÖ¸ÏòÊý¾ÝÁ÷µÄÆðʼ´¦£¬²¢ÇÒÒÔ"\n"×÷Ϊ·Ö¸î·û¡£µÚ¶þ¸öcopyº¯Êý½«»á´ÓÍ·ÖÁ⽫vectorÖеÄÄÚÈÝ"¿½±´"µ½Êä³öÉ豸£¬µÚÒ»¸ö²ÎÊýËù´ú±íµÄµü´úÆ÷½«»á´Ó¿ªÊ¼Î»ÖÃÿ´ÎÀÛ½ø£¬×îºóµ½´ïµÚ¶þ¸ö²ÎÊýËù´ú±íµÄµü´úÆ÷ËùÖ¸ÏòµÄλÖá£

Õâ¾ÍÊÇÈ«²¿µÄÄÚÈÝ¡£

2.3 ÀúÊ·µÄÆÀ¼Û

ÀúÊ·µÄ³µÂÖ×ÜÊǹö¹öÏòǰµÄ£¬¹¤ÒµÊ±´úµÄÎÄÃ÷½Ï֮ʷǰʱ´ú£¬µ±È»ÊÇÏȽø²¢ÇÒ·¢´ïµÄ¡£»Ø¹ËÄÇÁ½¸öʱ´úµÄC++³ÌÐò£¬Äã»áÕæÇеĸÐÊܵ½ÕâÖÖ²î±ð¡£¼ò½àÒ×Ó㬾ßÓй¤ÒµÇ¿¶È£¬½ÏºÃµÄ¿ÉÒÆÖ²ÐÔ£¬¸ßЧÂÊ£¬¼ÓÖ®µÚÈý¸öÁîÈËĿѣµÄ¾ø°æ³ÌÐòËùÌåÏÖ³öÀ´µÄ¸ß¶È³éÏóÐÔ£¬¸ß¶ÈÁé»îÐÔºÍ×é¼þ»¯ÌØÐÔ£¬Ê¹Äã¶ÔSTL±³ºóËùÔ̺¬µÄ·ºÐÍ»¯Ë¼Ïë¶¼ÓÐÁËЩ΢µÄ¸ÐÊÜ¡£

ÕæÐÒÔË£¬Äã¿ÉÒÔºá¿çÁ½¸öʱ´ú£¬Óлú»áÄ¿¶ÃÕâÖÖ"ÎÄÃ÷"µÄ²îÒ졣ͬʱ£¬ÕâÒ²Ó¦¸ÃʹÄãÔ½¼Ó¼á¶¨ÐÅÄʹ×Ô¼ºË³Ó¦Ê±´úµÄ³±Á÷¡£

2.4 ÈçºÎÔËÐÐ

ÔÚÄ㻹ûÓÐÕæÕý¿ªÊ¼ÔËÐÐÇ°ÃæºóÁ½¸ö³ÌÐò֮ǰ£¬×îºÃÏÈä¯ÀÀһϱ¾½Ú¡£ÕâÀï¼òµ¥½éÉÜÁËÔÚÌØ¶¨±àÒëÆ÷»·¾³ÏÂÔËÐÐSTL³ÌÐòµÄһЩϸ½Ú£¬²¢ÌṩÁËһЩ¿ÉÄÜÓöµ½µÄÎÊÌâµÄ½â¾ö°ì·¨¡£

´Ë´¦£¬ÎÒÑ¡ÓÃÁËĿǰÔÚWindowsƽ̨ϽÏΪ³£¼ûµÄMicrosoft Visual C++ 6.0ºÍBorland C++ Builder 6.0×÷ΪÀý×Ó¡£¾¡¹ÜVisual C++ 6.0¶Ô×îеÄANSI/ISO C++±ê×¼Ö§³ÖµÄ²¢²»ÊǺܺᣲ»¹ý¾Ý³ÆVisual C++ .NET£¨Ò²¾ÍÊÇVC7.0£©ÔÚÕâ·½ÃæµÄÐÔÄÜÓÐËù¸ÄÉÆ¡£

Äã¿ÉÒÔÑ¡ÓöàÖÖ·½Ê½ÔËÐÐÇ°ÃæµÄ³ÌÐò£¬±ÈÈçÔÚVisual C++Ï£¬Äã¿ÉÒÔÖ±½ÓÔÚDOSÃüÁîÐÐ״̬ϱàÒëÔËÐУ¬Ò²¿ÉÒÔÔÚVCµÄIDEϲÉÓÿØÖÆÌ¨Ó¦ÓóÌÐò£¨Console Application£©µÄ·½Ê½ÔËÐС£¶ÔÓÚC++ Builder£¬Çé¿öÒ²ÀàËÆ¡£

¶ÔÓÚVisual C++¶øÑÔ£¬Èç¹ûÊÇÔÚDOSÃüÁîÐÐ״̬Ï£¬ÄãÊ×ÏÈÐèÒªÕÒµ½ËüµÄ±àÒëÆ÷¡£¼Ù¶¨ÄãµÄVisual C++×°ÔÚC:\Program Files\Microsoft Visual Studio\VC98ÏÂÃæ£¬ÔòÆä±àÒëÆ÷ËùÔÚ·¾¶Ó¦¸ÃÊÇC:\Program Files\Microsoft Visual Studio\VC98\Bin£¬ÔÚÄÇÀïÄã¿ÉÒÔÕÒµ½cl.exeÎļþ¡£±àÒëʱÇë¼ÓÉÏ/GXºÍ/MT²ÎÊý¡£Èç¹ûÒ»ÇÐÕý³££¬½á¹û¾Í»á²úÉúÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£ÈçÏÂËùʾ£º

cl /GX /MT example2_2.cpp

ǰһ¸ö²ÎÊýÓÃÓÚ¸æÖª±àÒëÆ÷ÔÊÐíÒì³£´¦Àí£¨Exception Handling£©¡£ÔÚP. J. Plauger STLÖÐµÄºÜ¶àµØ·½Ê¹ÓÃÁËÒì³£´¦Àí»úÖÆ£¨¼´try¡­throw¡­catchÓï·¨£©£¬ËùÒÔÓ¦¸Ã¼ÓÉÏÕâ¸ö²ÎÊý£¬·ñÔò»áÓÐÈçϾ¯¸æÐÅÏ¢£º

warning C4530: C++ exception handler used, but unwind semantics are not enabled.

ºóÒ»¸ö²ÎÊýÔòÓÃÓÚʹ³ÌÐòÖ§³Ö¶àỊ̈߳¬ËüÐèÒªÔÚÁ´½ÓʱʹÓÃLIBCMT.LIB¿âÎļþ¡£²»¹ýP. J. Plauger STL²¢²»ÊÇḬ̈߳²È«µÄ£¨thread safety£©¡£Èç¹ûÄãÊÇÔÚVC»·¾³ÏÂʹÓÃÏñSTLportÕâÑùµÄSTLʵÏÖ°æ±¾£¬ÔòÐèÒª¼ÓÉÏÕâ¸ö²ÎÊý£¬ÒòΪSTLportÊÇḬ̈߳²È«µÄ¡£

Èç¹ûÔÚIDE»·¾³Ï£¬¿ÉÒÔÔÚн¨¹¤³ÌµÄʱºòÑ¡Ôñ¿ØÖÆÌ¨Ó¦ÓóÌÐò¡£

ͼ3£ºÔÚVisual C++ IDE»·¾³ÏÂÔËÐÐSTL³ÌÐò

ÖÁÓÚÄÇЩ²ÎÊýµÄÉèÖã¬Ôò¿ÉÒÔͨ¹ýÔÚProject¹¦Äܲ˵¥ÏîÖеÄSettings¹¦ÄÜ¡¾Alt+F7¡¿ÖÐÉèÖñàÒëÑ¡ÏîÀ´Íê³É¡£

ͼ4£ºÔÚVisual C++ IDE»·¾³ÏÂÉèÖñàÒë²ÎÊý

ÓÐʱ£¬ÔÚIDE»·¾³Ï±àÒëSTL³ÌÐòʱ£¬¿ÉÄÜ»á³öÏÖÈçϾ¯¸æÐÅÏ¢£¨Ç°ÃæÄǼ¸¸öʾÀý³ÌÐò²»»á³öÏÖÕâÖÖÇé¿ö£©£º

warning C4786: '¡­¡­' : identifier was truncated to '255'  characters in the debug information 

ÕâÊÇÒòΪ±àÒëÆ÷ÔÚDebug״̬ϱàÒëʱ£¬°Ñ³ÌÐòÖÐËù³öÏֵıêʶ·û³¤¶ÈÏÞÖÆÔÚÁË255¸ö×Ö·û·¶Î§ÄÚ¡£Èç¹û³¬¹ý×î´ó³¤¶È£¬ÕâЩ±êʶ·û¾ÍÎÞ·¨ÔÚµ÷ÊԽ׶β鿴ºÍ¼ÆËãÁË¡£¶øÔÚSTL³ÌÐòÖдóÁ¿µÄÓõ½ÁËÄ£°åº¯ÊýºÍÄ£°åÀ࣬±àÒëÆ÷ÔÚʵÀý»¯ÕâЩÄÚÈÝʱ£¬Õ¹¿ªÖ®ºóËù²úÉúµÄ±êʶ·ûÍùÍùºÜ³¤£¨Ã»×¼»áÓÐһǧ¶à¸ö×Ö·û£¡£©¡£Èç¹ûÄãÏëÈÏʶһÏÂÕâ¸öwarningµÄ»°£¬ºÜ¼òµ¥£¬ÔÚ³ÌÐòÀï¼ÓÉÏÈçÏÂÒ»ÐдúÂ룺

vector<string> string_array; // ÀàËÆÓÚ×Ö·û´®Êý×é±äÁ¿

¶ÔÓÚÕâÑùµÄwarning£¬µ±È»¿ÉÒÔÖÃÖ®²»Àí£¬²»¹ýÒ²ÊÇÓнâ¾ö°ì·¨µÄ¡£ Äã¿ÉÒÔÔÚÎļþ¿ªÍ·¼ÓÈëÏÂÃæÕâÒ»ÐУº#pragma warning(disable: 4786)¡£ËüÇ¿ÖÆ±àÒëÆ÷ºöÂÔÕâ¸ö¾¯¸æÐÅÏ¢£¬ÕâÖÖ×ö·¨ËäÈ»Óеã´Ö³£¬µ«ÊǺÜÓÐЧ¡£

ÖÁÓÚC++ Builder£¬ÆäDOSÃüÁîÐÐ״̬ϵÄÔËÐз½Ê½ÊÇÕâÑùµÄ¡£¼ÙÈçÄãµÄC++ Builder×°ÔÚC:\Program Files\Borland\CBuilder6¡£ÔòÆä±àÒëÆ÷ËùÔÚ·¾¶Ó¦¸ÃÊÇC:\Program Files\ Borland\CBuilder6\Bin£¬ÔÚÄÇÀïÄã¿ÉÒÔÕÒµ½bcc32.exeÎļþ£¬ÊäÈëÈçÏÂÃüÁ¼´´ó¹¦¸æ³ÉÁË£º

bcc32 example2_2.cpp

ÖÁÓÚIDE»·¾³Ï£¬Ôò¿ÉÒÔÔÚн¨Ó¦ÓóÌÐòµÄʱºò£¬Ñ¡Ôñ¿ØÖÆÌ¨Ïòµ¼£¨Console Wizard£©¡£

ͼ5£ºÔÚC++ Builder IDE»·¾³ÏÂÔËÐÐSTL³ÌÐò

ÏÖÔÚÄã¿ÉÒÔÔÚÄãµÄ»úÆ÷ÉÏÔËÐÐÇ°ÃæµÄʾÀý³ÌÐòÁË¡£²»¹ý£¬ÇëË¡ÎÒ¶à×죬ÓÐЩϸ½Ú²»µÃ²»ÌáÇëÄã×¢Ò⡣СÐıàÒëÆ÷¸øÄãÁôϵÄÏÝÚå¡£±ÈÈçÇ°ÃæµÚÈý¸ö³ÌÐòÖÐÓÐÈçÏÂÕâÒ»ÐдúÂ룺

typedef back_insert_iterator< int_vector > back_ins_itr;

ÇëÁôÒâ">"Ç°ÃæµÄ¿Õ¸ñ£¬×îºÃ²»ÒªÊ¡È¥¡£Èç¹ûÄãÁßϧÕâµã¿Õ¸ñËùÕ¼ÓõĴÅÅ̿ռäµÄ»°£¬ÄǾÍÌ«²»»®ËãÁË¡£ÆäÔ­Òò»¹ÊÇÔÚÓÚC++±àÒëÆ÷±¾ÉíµÄȱÏÝ¡£ÉÏÊö´úÂ룬Ï൱ÓÚÈçÏ´úÂ루±àÒëÆ÷×öµÄÒ²ÕýÊÇÕâÑùµÄ·­Ò빤×÷£©£º

typedef back_insert_iterator< vector<int>> back_ins_itr;

Èç¹ûÄãûÓмӿոñµÄ»°£¬±àÒëÆ÷»á°Ñ">>"ÎóÈÏΪÊǵ¥Ò»±êʶ£¨¿´ÆðÀ´ºÜÏñÄǸöÊý¾ÝÁ÷ÊäÈë²Ù×÷·û">>"£©¡£ÎªÁ˻رÜÕâ¸öÄÑÌ⣬C++ÒªÇóʹÓÃÕß±ØÐëÔÚÁ½¸öÓÒ¼âÀ¨ºÅÖ®¼ä²åÈë¿Õ¸ñ¡£ËùÒÔ£¬Äã×îºÃ»¹ÊÇÀÏÀÏʵʵÕÕÎҵϰ×ö£¬ÒÔ±ÜÃâ²»±ØÒªµÄÂé·³¡£²»¹ýÓÐȤµÄÊÇ£¬¶ÔÓÚÉÏÊöÄÇÐÐÕ¹¿ªÇ°µÄ´úÂ룬ÔÚVisual C++ÀTʹÄãûÓмӿոñ£¬±àÒëÆ÷Ò²²»»á±¨´í¡£¶øÍ¬ÑùµÄ´úÂëÔÚC++ BuilderÖÐûÓÐÄÇôÐÒÔËÁË¡£²»¹ý£¬×îºÃ»¹ÊDz»ÒªÐÄ´æ½ÄÐÒ£¬Èç¹ûÄã²ÉÓÃÕ¹¿ªºóµÄÊéд·½Ê½£¬ÔòÁ½¸ö±àÒëÆ÷¶¼²»»á¸øÄãÁôÇéÃæÁË¡£

ºÃÁË£¬ÇëÔ­ÁÂÎÒµÄÐõß¶£¬ÏÖÔÚÄã¿ÉÒÔÇ×Éí¸ÐÊÜÒ»ÏÂSTLËù´ø¸øÄãµÄÕæÕý¶ÀÌØ÷ÈÁ¦ÁË£¬×£ÄãºÃÔË£¡

   
4068 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
Visual C++±à³ÌÃüÃû¹æÔò
ÈκÎʱºò¶¼ÊÊÓõÄ20¸öC++¼¼ÇÉ
CÓïÑÔ½ø½×
´®¿ÚÇý¶¯·ÖÎö
ÇáÇáËÉËÉ´ÓCһ·×ßµ½C++
C++±à³Ì˼Ïë


C++²¢·¢´¦Àí+µ¥Ôª²âÊÔ
C++³ÌÐò¿ª·¢
C++¸ß¼¶±à³Ì
C/C++¿ª·¢
C++Éè¼ÆÄ£Ê½
C/C++µ¥Ôª²âÊÔ


±±¾© ǶÈëʽC¸ßÖÊÁ¿±à³Ì
Öйúº½¿Õ ǶÈëʽC¸ßÖÊÁ¿±à³Ì
»ªÎª C++¸ß¼¶±à³Ì
±±¾© C++¸ß¼¶±à³Ì
µ¤·ð˹ C++¸ß¼¶±à³Ì
±±´ó·½Õý CÓïÑÔµ¥Ôª²âÊÔ
ÂÞ¿ËΤ¶û C++µ¥Ôª²âÊÔ