STL¼¼ÊõÎÄÕ²»ÍêÈ«Áбí(STLѧϰʹÓÃÖ¸ÄÏ)
×÷Õߣº
Winter
À´Ô´:
×îÓÅÐãµÄSTLÑ§Ï°ÍøÕ¾
ÔÚÍøÂçÉÏ£¬¹ØÓÚSTLʹÓõÄÓÐÐí¶àÓÅÐãµÄÎĵµ£¬±¾ÎÄÊÕ¼¯ÁËһЩ¾µäµÄÖÐÎĺÍÓ¢ÎÄÎÄÕ£¬°üº¬STLÖеıê×¼ÈÝÆ÷ vector list set map deque hash_map multiset multimap hash_set string Allocate stream¼°Ëã·¨µÈ¸÷¸ö·½Ã棬²¢»á×ö¼ò¶ÌµÄÄÚÈݽéÉÜºÍÆÀ¼Û£¬²¢Ôö¼ÓÏàÓ¦µÄÁ´½Ó¡£ÒÔºó»áËæÊ±¸üв¹³äеÄÄÚÈÝ£¬Èç¹ûÓÐÅóÓÑ·¢ÏÖ¸üºÃµÄÎÄÕ£¬Çë»Ø¸´ÁôÑÔ£¬ÎÒÒ²»á¼ÓÈëÁбíÖÐ--Winter
1 STLÈëÃŽ̳̣º
±ê׼ģ°å¿â(STL)½éÉÜ
¡ï¡ï¡ï¡ï¡ï
±¾ÎÄÒÔListÈÝÆ÷ΪÀý×Ó£¬½éÉÜÁËSTLµÄ»ù±¾ÄÚÈÝ£¬´ÓÈÝÆ÷µ½µü´úÆ÷£¬ÔÙµ½ÆÕͨº¯Êý£¬¶øÇÒÀý×ӷḻ£¬Í¨Ë×Ò×¶®¡£²»Ê§ÎªSTLµÄÈëÃÅÎÄÕ£¬ÐÂÊÖ²»ÈÝ´í¹ý¡£
STLʵ¼ùÖ¸ÄÏ ¡ï¡ï¡ï¡ï¡ï
ÎÄÕ´ÓSTL»ù´¡ÖªÊ¶½²Æð£¬Öð²½ÉîÈë£¬Éæ¼°µ½ÁËSTL±àд´úÂëµÄ·½·¨¡¢STL´úÂëµÄ±àÒëºÍµ÷ÊÔ¡¢ÃüÃû¿Õ¼ä¡¢STLÖеÄANSI/ISO×Ö·û´®¡¢¸÷ÖÖ²»Í¬ÀàÐ͵ÄÈÝÆ÷¡¢Ä£°å¡¢ÓαꡢËã·¨¡¢·ÖÅäÆ÷¡¢ÈÝÆ÷µÄǶÌ׵ȷ½ÃæµÄÎÊÌ⣬×÷ÕßÔÚÕâÆªÎÄÕÂÖжԶÁÕßÌá³öÁËһЩ½¨Ò飬²¢Ö¸³öÁËʹÓÃSTLʱӦ¸Ã×¢ÒâµÄÎÊÌâ¡£
ÈýÊ®·ÖÖÓÕÆÎÕSTL¡ï¡ï¡ï¡ï
Óиö½ÐkarryµÄÍøÓÑ·ÒëµÄ¡¶using stl¡·£¬¿ÉÒÔ¿ìËÙä¯ÀÀ£¬´Ó0¿ªÊ¼Á˽âSTL¡£ÖµµÃÒ»¿´¡£
C++ STL¼ò½é ¡ï¡ï
ÎÄÕ´ÓËã·¨¡¢ÈÝÆ÷¡¢µü´úÆ÷Èý·½Ãæ¼òÒª½éÉÜÁËSTL£¬¶ÁÕß¿ÉÒÔ¶ÔSTLÓÐÒ»¼òµ¥Ó³Ïñ¡£
C++ STLÇáËɵ¼Ñ§ ¡ï¡ï¡ï
±¾½Ì³Ì½éÉÜÓйØÑ§Ï°C++ STLµÄÔ¤±¸ÖªÊ¶ºÍSTLµÄÏà¹Ø±³¾°ÖªÊ¶£¬ÊʺÏÏë¶ÔSTL×ö´óÖÂÁ˽âµÄ³õѧÕß¡£
STLѧϰС½á ¡ï¡ï
ÎÄÖнéÉÜSTL»ù´¡ÖªÊ¶£¬ÅäÓÐÒ»¸öÕûÌåʵÀýºÍͼ±í˵Ã÷£¬×îºó»¹×öÁ˼òµ¥µÄЧÂʲâÊÔ¡£
STLʹÓÃÈëÃÅ ¡ï¡ï¡ï
±¾ÎÄÊʺÏÄÇЩÏëÁ¢¼´¿ªÊ¼Ê¹Ó㬶ø²»Ïë¹Ø×¢Ì«¶àSTLËöËéϸ½ÚµÄ³ÌÐòÔ±¡£ÒÔlistΪÀý£¬½²½âÁËÔÚʹÓùý³ÌÖеÄ×¢ÒâÊÂÏî¡£
2 STL ÈÝÆ÷£º
Ïêϸ½â˵STL string ¡ï¡ï¡ï¡ï¡ï
WinterµÄÏêϸ½â˵STLϵÁÐÖ®Ò»£¬¶ÔstringµÄÔÀíºÍ³£ÓÃʹÓýøÐÐÁËÏêϸ½â˵£¬²¢¶ÔstringÔÚʹÓùý³ÌÖеÄ×¢ÒâÊÂÏî½øÐÐÁË×ܽᡣÈç¹ûÄãÏ£Íû¶ÔstringÓÐÈ«ÃæµÄÁ˽⣬ÕâÆªÎÄÕÂÊÇÔٺò»¹ýÁË¡£
ÉîÈëÑо¿ STL Deque ÈÝÆ÷ ¡ï¡ï¡ï¡ï¡ï
ÎÄÕÂÉîÈëµØÑо¿ÁËstd::deque ÈÝÆ÷¡£±¾ÎĽ«ÌÖÂÛÔÚһЩÇé¿öÏÂʹÓÃdeque ±Èvector¸üºÃ¡£¶ÁÍêÕâÆªÎÄÕºó¶ÁÕßÓ¦¸ÃÄܹ»Àí½âÔÚÈÝÁ¿Ôö³¤µÄ¹ý³ÌÖÐdeque ÓëvectorÔÚÄÚ´æ·ÖÅäºÍÐÔÄܵIJ»Í¬±íÏÖ¡£ÀÏÍâдÎÄÕÂȷʵ±È½ÏÑϽ÷£¬ÖµµÃÒ»¿´¡£
STL vector ÈÝÆ÷½éÉÜ ¡ï¡ï¡ï¡ï¡ï
ÕâÆªÎÄÕµÄÄ¿µÄÊÇΪÁ˽éÉÜstd::vector£¬ÈçºÎÇ¡µ±µØÊ¹ÓÃËüÃǵijÉÔ±º¯ÊýµÈ²Ù×÷¡£±¾ÎÄÖл¹ÌÖÂÛÁËÌõ¼þº¯ÊýºÍº¯ÊýÖ¸ÕëÔÚµü´úËã·¨ÖÐʹÓã¬ÈçÔÚremove_if()ºÍfor_each()ÖеÄʹÓá£Í¨¹ýÔĶÁÕâÆªÎÄÕ¶ÁÕßÓ¦¸ÃÄܹ»ÓÐЧµØÊ¹ÓÃvectorÈÝÆ÷£¬¶øÇÒÓ¦¸Ã²»»áÔÙȥʹÓÃCÀàÐ͵Ķ¯Ì¬Êý×éÁË¡£ÓÖÊÇһƪ¾µä¡£
ѧϰSTL map, STL setÖ®Êý¾Ý½á¹¹»ù´¡¡ï¡ï¡ï
±¾ÎÄÁгö¼¸¸ö»ù±¾µÄSTL mapºÍSTL setµÄÎÊÌ⣬ͨ¹ý½â´ðÕâЩÎÊÌâ½²½âÁËSTL¹ØÁªÈÝÆ÷ÄÚ²¿µÄÊý¾Ý½á¹¹£¬×îºóÌá³öÁ˹ØÓÚUNIX/LINUX×Ô´øÆ½ºâ¶þ²æÊ÷¿âº¯ÊýºÍmap, setÑ¡ÔñÎÊÌ⣬²¢·ÖÎöÁËmap, setµÄÓÅÊÆÖ®´¦¡£¶ÔÓÚÏ£ÍûÉîÈëѧϰSTLºÍÏ£ÍûÁ˽âSTL mapµÈ¹ØÁªÈÝÆ÷µ×²ãÊý¾Ý½á¹¹µÄÅóÓÑÀ´Ëµ£¬ÓÐÒ»¶¨µÄ²Î¿¼¼ÛÖµ
STLÖÐÓÃvector ¸Ä½øÄÚ´æµÄÔÙ·ÖÅä¡ï¡ï¡ï
±¾ÎÄÃèÊöµÄÊÇÒ»Öֺܳ£¼ûµÄÇé¿ö£ºµ±ÄãÔÚij¸ö»º´æÖд洢Êý¾Ýʱ£¬³£³£ÐèÒªÔÚÔËÐÐʱµ÷Õû¸Ã»º´æµÄ´óС£¬ÒÔ±ãÄÜÈÝÄɸü¶àµÄÊý¾Ý¡£±¾ÎĽ«ÌÖÂÛÈçºÎʹÓà STL µÄ vector ½øÐÐÄÚ´æµÄÔÙ·ÖÅä¡£ÔÀí˵µÄ±È½ÏÏêϸ£¬¶ÔÓÚ³õѧÕ߱ȽÏÊÊÓá£
3 STLÓ¦Óãº
ʹÓÃSTLÁ÷(stream)À´¼ò»¯C++¡°Ḭ̈߳²È«¡±ÈÕÖ¾¼Ç¼¡ï¡ï¡ï¡ï
Á÷ÊÇÒ»ÖÖÇ¿´óµÄÊý¾Ý´¦Àí³éÏó»úÖÆ£¬ËüÔÊÐíÄãµ÷Ó÷ºÐ͵ĶÁ/дº¯Êý£¬²»±Ø¹ØÐÄÊý¾Ý´ÓʲôµØ·½À´¡¢µ½Ê²Ã´µØ·½È¥¡£Ê¹ÓÃÁ÷£¬Í¬ÑùµÄ´úÂë¿É´Ó¿ØÖÆÌ¨¡¢Îļþ¡¢Ì×½Ó×ֵȵط½¶ÁÈ¡Êý¾Ý¡£STLͨ³£²»ÊÇḬ̈߳²È«µÄ£¬±¾ÎÄÌá³öÁËÈçºÎÔÚḬ̈߳²È«µÄ·½Ê½ÏÂʹÓÃÁ÷µÄ·½°¸¡£
Óñê׼ģ°å¿âSTLʵÏÖÎļþ±È½Ï¡ï¡ï¡ï
±¾ÎÄÌÖÂÛÈçºÎʹÓñê׼ģ°å¿â(STL)£¬ÀàÄ£°åºÍº¯ÊýÄ£°å£¬ÒÔ¼°ÆäËü±à³Ì¼¼ÊõÀ´½â¾öʵ¼ÊÎÊÌâ¡£±¾ÎÄÉæ¼°µ½STL°üº¬µÄ¼¯ºÏºÍÏòÁ¿£¬º¯ÊýÄ£°å£¬ÀàÄ£°å£¬³£Á¿¼ìÑ飬³ö´í´¦ÀíºÍʹÓÃSTLµÄÎļþI/O¡£
ÓÃSTL¿ìËÙ±àдiniÅäÖÃÎļþʶ±ðÀà
iniÎļþÊǼ¼ÊõÈËÔ±¾³£Óõ½µÄÒ»ÖÖϵͳÅäÖ÷½·¨£¬ÈçºÎ¶ÁÈ¡ºÍ¿ìËÙʶ±ðiniÎļþÖеÄÄÚÈÝʵÏÖÆðÀ´±È½Ï·±Ëö¡£STLÇ¿´óµÄ¹¦ÄÜÔÚÓÚÄÜ¿ìËÙµÄʵÏÖÅÅÐò¡¢²éÕÒ¡¢
ʶ±ðµÈ¹¦ÄÜ¡£±¾ÎÄͨ¹ýSTLÖеÄmap£¬string£¬vector,ifstreamµÈ£¬À´¿ìËÙʵÏÖiniÎļþµÄʶ±ðÀàclass
IniFile?¡£IniFile¿ÉÒÔʵÏÖ³£¼û²éÕÒ¹¦ÄÜ£¬²¢ÌṩÍêÕûµÄÔ´Âë¡£
4 STLÆäËû£º
±ê×¼¿â£ºSTL AllocatorÄÜ×öʲô¡ï¡ï¡ï¡ï¡ï
±¾ÎĸæËßÄãʲôʱºò²»ÐèÒªAllocator£¬Ê²Ã´Ê±ºòÐèÒªAllocator£¬ÈçºÎ¶¨ÒåAllocator¡£ÅäÓÐÏêϸµÄ´úÂë˵Ã÷¡£Èç¹ûÄãÏ£Íû¶ÔAllocatorÓгõ²½ÈÏʶ£¬ÕâÆªÎÄÕÂ»á¸æËßÄã¡£
Ïêϸ½â˵ STL ÅÅÐò(Sort)¡ï¡ï¡ï¡ï¡ï
STL¼¸ºõ·â×°ÁËËùÓеÄÊý¾Ý½á¹¹ÖеÄËã·¨£¬´ÓÁ´±íµ½¶ÓÁУ¬´ÓÏòÁ¿µ½¶ÑÕ»£¬¶Ôhashµ½¶þ²æÊ÷£¬´ÓËÑË÷µ½ÅÅÐò£¬´ÓÔö¼Óµ½É¾³ý......¿ÉÒÔ˵£¬Èç¹ûÄãÀí½âÁËSTL£¬Äã»á·¢ÏÖÄãÒѲ»ÓþÐÄàÓÚËã·¨±¾Éí£¬´Ó¶øÕ¾ÔÚ¾ÞÈ˵ļç°òÉÏÈ¥¿¼ÂǸü¸ß¼¶µÄÓ¦Óá£ÅÅÐòËã·¨ÊÇÓ¦ÓÃ×îΪ¹ã·ºµÄËã·¨Ö®Ò»¡£±¾ÎÄÏêϸ½éÉÜSTL ÖÐ sort partial_sort nth_element partition µÈËã·¨µÄÓ÷¨ºÍÇø±ð¡£
Effective STLÖÐÎÄ°æ ¡ï¡ï¡ï¡ï¡ï
·ÖΪ50¸öÌõ¿î£¬Ã¿¸öÌõ¿îÒ»¸öÖ÷Ì⣬Ïêϸ½éÉÜÁËSTLÈÝÆ÷¡¢Ëã·¨¡¢µü´úÆ÷¡¢Allocator¡¢Ó¦Óõȣ¬Í¨¹ýÀý×Ó£¬Í¨Ë×Ò×¶®¡£µ«ÊÇÐèÒª¶ÁÕßÓÐÒ»¶¨µÄ»ù´¡ÖªÊ¶£¨ÖÁÉÙÖªµÀvectorÊǸöÈÝÆ÷°É£©£¬Óɲ»Í¬×÷Õß·Ò룬WinterÒ²·ÒëÁ˼¸Æª¡£¹²ÓÐ50ƪÎÄÕ£¬Ã¿ÆªÎÄÕÂÏ໥¶ÀÁ¢£¬ÄãÏ뿴ʲô×Ô¼ºÑ¡°É¡£Ç¿ÁÒÍÆ¼ö¡£
³¹µ×ѧϰSTLÖеÄAllocator ¡ï¡ï¡ï¡ï
AllocatorÊÇC++ÓïÑÔ±ê×¼¿âÖÐ×îÉñÃØµÄ²¿·ÖÖ®Ò»¡£ËüÃǺÜÉÙ±»ÏÔʽʹÓ㬱ê׼ҲûÓÐÃ÷È·³öËüÃÇÓ¦¸ÃÔÚʲôʱºò±»Ê¹Óá£ÎÄÕÂÏêϸµØ½éÉÜÁËSTLÖÐAllocatorµÄÓ÷¨ºÍÌØµã¡£Èç¹ûÄãÓн϶àµÄSTL֪ʶ£¬ÓÖÏë¸üÉîÈëµÄÁ˽âSTL
Alloc£¬ÕâÆªÎÄÕÂÔٺò»¹ýÁË¡£
STLÖ®¸¸·Ã̸¼¡ï¡ï¡ï¡ï
STLÖ®¸¸Alexander Stepanov½ÓÊÕ¼ÇÕߵIJɷã¬ÎÄÕ¶Ôì¶STL·¢Õ¹ÀúÊ·µÄ×îÍ걸½éÉÜ, ºî½ÝÏÈÉúÔÚËûµÄSTLÓйØÎÄÕÂÀïÍÆ¼ö´ó¼ÒÔĶÁÕâÆªÎÄÕ¡£ÔÎÄÔÚSGI STLÉÏÓÐÒ»¸ö°æ±¾£¬ÔÚportSTLÉÏÓÐÒ»¸ö°æ±¾£¬Winter×öÁ˼òµ¥µÄÕûÀí£¬°ÑÁ½¸ö°æ±¾µÄÓ¢ÎĺÍÖÐÎİ汾¶¼×öÁËÏàÓ¦µÄÁ´½Ó¡£»¹¿ÉÒԲο¨×î½üµÄ·ÃÎÊ:[[http://stl.winterxy.com/html/000066.html][¶Ô»°STL
Ö®¸¸Alex Stepanov]]¡£
STLµÄ²»Í¬ÊµÏÖ°æ±¾ ¡ï¡ï¡ï
¼òÒª½éÉÜÁËSTLµÄ¼¸¸ö°æ±¾£¬°üÀ¨
HP STL, P.J.Plauger STL¡¢ Rouge Wave STL¡¢ STLport¡¢ SGI STL£¬ËäÈ»ÎÄÕ±Ƚ϶̣¬Èç¹ûÏëÁ˽âSTL°æ±¾ÖªÊ¶£¬»¹ÊÇÖµµÃÒ»¿´µÄ¡£
CUJÎĿ⣺STLÖеÄUnary Predicates¡ï¡ï
±ê×¼ÔËÐпâÖеö·ºÐÍËã·¨ÔÚÔËÐÐʱʹÓÃÁËÒ»ÔªÅж¨Ê½£¨unary predicate£©¡£Àý×ÓÊÇ´øifµÄËã·¨£¬±ÈÈçcount_if()¡¢find_if()¡¢remove_if()¡¢ºÍreplace_if()£¬µ«Ò²ÓÐpartition()ÕâÑù[²»´øif]µÄËã·¨¡£ÔÚ±¾´ÎרÀ¸ÖУ¬ÎÒÃǾͽü¾àÀë½Ó´¥unary
predicate£¬¿´ËüÃÇ¿ÉÄÜÒÔ¼°¾ø²»ÄÜ×öʲô¡££¨ÄÚÈݱȽÏרҵÁË£¬Ö»ÊÇ·ÒëµÃºÃÏñ²»¹»ºÃ£©
ÌåÑéVisual C++.NET 2005ÖеÄSTL¡ï¡ï¡ï¡ï
±¾ÎÄÏêϸ½²½âÁËSTL.netµÄÌØÐÔ£¬ÆäÓÅÊÆ£¬²¢Óгä·ÖµÄʵÀý£¬ÖµµÃÒ»¿´¡£
STLѧϰ×ÊÔ´Áбí¡ï¡ï¡ï¡ï¡ï
±¾ÎÄÖÐÁоÙÁËȨÍþµÄSTL¹Ù·½ÍøÕ¾ºÍSTLÑ§Ï°ÍøÕ¾£¬²¢ÌṩÁ˾µäµÄSTL½Ì³ÌÍÆ¼öºÍµç×ÓÊéÏÂÔØ£¬²»¿É´í¹ý¡£
- Set MYTITLE = STL¼¼ÊõÎÄÕ²»ÍêÈ«Áбí(STLѧϰʹÓÃÖ¸ÄÏ)