ÀÖÓãµç¾º


½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

C++ Åàѵ֮C++STL Ò»°ã×ܽá(Ò»)

¸üÐÂʱ¼ä:2016Äê08ÔÂ26ÈÕ16ʱ41·Ö À´Ô´:ÀÖÓã²¥¿ÍC++ÅàѵѧԺ ä¯ÀÀ´ÎÊý:

Ò»¡¢Ò»°ã½éÉÜ
      STL£¨Standard Template Library£©£¬¼´±ê׼ģ°å¿â£¬ÊÇÒ»¸ö¾ßÓй¤ÒµÇ¿¶ÈµÄ£¬¸ßЧµÄC++³ÌÐò¿â¡£Ëü±»ÈÝÄÉÓÚC++±ê×¼³ÌÐò¿â£¨C++ Standard Library£©ÖУ¬ÊÇANSI/ISO C++±ê×¼ÖÐ×îеÄÒ²ÊǼ«¾ß¸ïÃüÐÔµÄÒ»²¿·Ö¡£¸Ã¿â°üº¬ÁËÖî¶àÔÚ¼ÆËã»ú¿ÆÑ§ÁìÓòÀïËù³£ÓõĻù±¾Êý¾Ý½á¹¹ºÍ»ù±¾Ëã·¨¡£Îª¹ã´óC++³ÌÐòÔ±ÃÇÌṩÁËÒ»¸ö¿ÉÀ©Õ¹µÄÓ¦Óÿò¼Ü£¬¸ß¶ÈÌåÏÖÁËÈí¼þµÄ¿É¸´ÓÃÐÔ¡£
      ´ÓÂß¼­²ã´ÎÀ´¿´£¬ÔÚSTLÖÐÌåÏÖÁË·ºÐÍ»¯³ÌÐòÉè¼ÆµÄ˼Ï루generic programming£©£¬ÒýÈëÁËÖî¶àеÄÃû´Ê£¬±ÈÈçÏñÐèÇó£¨requirements£©£¬¸ÅÄconcept£©£¬Ä£ÐÍ£¨model£©£¬ÈÝÆ÷£¨container£©£¬Ëã·¨£¨algorithmn£©£¬µü´ú×Ó£¨iterator£©µÈ¡£ÓëOOP£¨object-oriented programming£©ÖеĶà̬£¨polymorphism£©Ò»Ñù£¬·ºÐÍÒ²ÊÇÒ»ÖÖÈí¼þµÄ¸´Óü¼Êõ£»
       ´ÓʵÏÖ²ã´Î¿´£¬Õû¸öSTLÊÇÒÔÒ»ÖÖÀàÐͲÎÊý»¯£¨type parameterized£©µÄ·½Ê½ÊµÏֵģ¬ÕâÖÖ·½Ê½»ùÓÚÒ»¸öÔÚÔçÏÈC++±ê×¼ÖÐûÓгöÏÖµÄÓïÑÔÌØÐÔ--Ä£°å£¨template£©¡£Èç¹û²éÔÄÈκÎÒ»¸ö°æ±¾µÄSTLÔ´´úÂ룬Äã¾Í»á·¢ÏÖ£¬Ä£°å×÷Ϊ¹¹³ÉÕû¸öSTLµÄ»ùʯÊÇÒ»¼þÇ§ÕæÍòÈ·µÄÊÂÇé¡£³ý´ËÖ®Í⣬»¹ÓÐÐí¶àC++µÄÐÂÌØÐÔΪSTLµÄʵÏÖÌṩÁË·½±ã£»
 
¶þ¡¢STLµÄÁù´ó×é¼þ
  • ÈÝÆ÷£¨Container£©£¬ÊÇÒ»ÖÖÊý¾Ý½á¹¹£¬Èçlist£¬vector£¬ºÍdeques £¬ÒÔÄ£°åÀàµÄ·½·¨Ìṩ¡£ÎªÁË·ÃÎÊÈÝÆ÷ÖеÄÊý¾Ý£¬¿ÉÒÔʹÓÃÓÉÈÝÆ÷ÀàÊä³öµÄµü´úÆ÷£»
  • µü´úÆ÷£¨Iterator£©£¬ÌṩÁË·ÃÎÊÈÝÆ÷ÖжÔÏóµÄ·½·¨¡£ÀýÈ磬¿ÉÒÔʹÓÃÒ»¶Ôµü´úÆ÷Ö¸¶¨list»òvectorÖеÄÒ»¶¨·¶Î§µÄ¶ÔÏó¡£µü´úÆ÷¾ÍÈçͬһ¸öÖ¸Õë¡£ÊÂʵÉÏ£¬C++µÄÖ¸ÕëÒ²ÊÇÒ»ÖÖµü´úÆ÷¡£µ«ÊÇ£¬µü´úÆ÷Ò²¿ÉÒÔÊÇÄÇЩ¶¨ÒåÁËoperator*()ÒÔ¼°ÆäËûÀàËÆÓÚÖ¸ÕëµÄ²Ù×÷·ûµØ·½·¨µÄÀà¶ÔÏó£»
  • Ëã·¨£¨Algorithm£©£¬ÊÇÓÃÀ´²Ù×÷ÈÝÆ÷ÖеÄÊý¾ÝµÄÄ£°åº¯Êý¡£ÀýÈ磬STLÓÃsort()À´¶ÔÒ»¸övectorÖеÄÊý¾Ý½øÐÐÅÅÐò£¬ÓÃfind()À´ËÑË÷Ò»¸ölistÖеĶÔÏ󣬺¯Êý±¾ÉíÓëËûÃDzÙ×÷µÄÊý¾ÝµÄ½á¹¹ºÍÀàÐÍÎ޹أ¬Òò´ËËûÃÇ¿ÉÒÔÔÚ´Ó¼òµ¥Êý×éµ½¸ß¶È¸´ÔÓÈÝÆ÷µÄÈκÎÊý¾Ý½á¹¹ÉÏʹÓã»
  • ·Âº¯Êý£¨Function object£¬·Âº¯Êý(functor)ÓÖ³ÆÖ®Îªº¯Êý¶ÔÏó£¨function object£©£¬Æäʵ¾ÍÊÇÖØÔØÁË()²Ù×÷·ûµÄstruct£¬Ã»ÓÐÊ²Ã´ÌØ±ðµÄµØ·½
  • µü´úÊÊÅäÆ÷£¨Adaptor£©
  • ¿Õ¼äÅäÖÆÆ÷£¨allocator£©ÆäÖÐÖ÷Òª¹¤×÷°üÀ¨Á½²¿·Ö1.¶ÔÏóµÄ´´½¨ÓëÏú»Ù    2.ÄÚ´æµÄ»ñÈ¡ÓëÊÍ·Å
ÒÔÏÂÖ÷ÒªÌÖÂÛ£ºÈÝÆ÷£¬µü´úÆ÷£¬Ëã·¨£¬ÊÊÅäÆ÷¡£ÈçÓûÏê¼ÓÁ˽⠲μûC++ Primer 
 
1.STLÈÝÆ÷
1£©ÐòÁÐʽÈÝÆ÷£¨Sequence containers£©£¬Ã¿¸öÔªËØ¶¼Óй̶¨Î»Öã­£­È¡¾öÓÚ²åÈëʱ»úºÍµØµã£¬ºÍÔªËØÖµÎ޹أ¬vector¡¢deque¡¢list£»
    Vectors£º½«ÔªËØÖÃÓÚÒ»¸ö¶¯Ì¬Êý×éÖмÓÒÔ¹ÜÀí£¬¿ÉÒÔËæ»ú´æÈ¡ÔªËØ£¨ÓÃË÷ÒýÖ±½Ó´æÈ¡£©£¬Êý×éβ²¿Ìí¼Ó»òÒÆ³ýÔªËØ·Ç³£¿ìËÙ¡£µ«ÊÇÔÚÖв¿»òÍ·²¿°²²åÔªËØ±È½Ï·Ñʱ£»
    Deques£ºÊÇ“double-ended queue”µÄËõд£¬¿ÉÒÔËæ»ú´æÈ¡ÔªËØ£¨ÓÃË÷ÒýÖ±½Ó´æÈ¡£©£¬Êý×éÍ·²¿ºÍβ²¿Ìí¼Ó»òÒÆ³ýÔªËØ¶¼·Ç³£¿ìËÙ¡£µ«ÊÇÔÚÖв¿»òÍ·²¿°²²åÔªËØ±È½Ï·Ñʱ£»
   Lists£ºË«ÏòÁ´±í£¬²»Ìá¹©Ëæ»ú´æÈ¡£¨°´Ë³Ðò×ßµ½Ðè´æÈ¡µÄÔªËØ£¬O(n)£©£¬ÔÚÈκÎλÖÃÉÏÖ´ÐвåÈë»òɾ³ý¶¯×÷¶¼·Ç³£Ñ¸ËÙ£¬ÄÚ²¿Ö»Ðèµ÷ÕûÒ»ÏÂÖ¸Õ룻
2£©¹ØÁªÊ½ÈÝÆ÷£¨Associated containers£©£¬ÔªËØÎ»ÖÃÈ¡¾öÓÚÌØ¶¨µÄÅÅÐò×¼Ôò£¬ºÍ²åÈë˳ÐòÎ޹أ¬set¡¢multiset¡¢map¡¢multimap£»
    Sets/Multisets£ºÄÚ²¿µÄÔªËØÒÀ¾ÝÆäÖµ×Ô¶¯ÅÅÐò£¬SetÄÚµÄÏàͬÊýÖµµÄÔªËØÖ»ÄܳöÏÖÒ»´Î£¬MultisetsÄڿɰüº¬¶à¸öÊýÖµÏàͬµÄÔªËØ£¬ÄÚ²¿Óɶþ²æÊ÷ʵÏÖ£¨Êµ¼ÊÉÏ»ùÓÚºìºÚÊ÷(RB-tree£©ÊµÏÖ£©£¬±ãÓÚ²éÕÒ£»
    Maps/Multimaps£ºMapµÄÔªËØÊdzɶԵļüÖµ/ʵֵ£¬ÄÚ²¿µÄÔªËØÒÀ¾ÝÆäÖµ×Ô¶¯ÅÅÐò£¬MapÄÚµÄÏàͬÊýÖµµÄÔªËØÖ»ÄܳöÏÖÒ»´Î£¬MultimapsÄڿɰüº¬¶à¸öÊýÖµÏàͬµÄÔªËØ£¬ÄÚ²¿Óɶþ²æÊ÷ʵÏÖ£¨Êµ¼ÊÉÏ»ùÓÚºìºÚÊ÷(RB-tree£©ÊµÏÖ£©£¬±ãÓÚ²éÕÒ£»
ÁíÍâÓÐÆäËûÈÝÆ÷hash_map,hash_set,hash_multiset,hash_multimap¡£
  ÈÝÆ÷µÄ±È½Ï£º
Vector Deque List Set MultiSet Map MultiMap
ÄÚ²¿½á¹¹ dynamic array array of arrays double linked list binary tree binary tree binary tree binary tree
Ëæ»ú´æÈ¡ Yes Yes No No No Yes(key) No
ËÑË÷ËÙ¶È Âý Âý ºÜÂý ¿ì ¿ì ¿ì ¿ì
¿ìËÙ²åÈëÒÆ³ý β²¿ Ê×β ÈκÎλÖà -- -- -- --
 
2.STLµü´úÆ÷ 
Iterator£¨µü´úÆ÷£©Ä£Ê½ÓÖ³ÆCursor£¨Óα꣩ģʽ£¬ÓÃÓÚÌṩһÖÖ·½·¨Ë³Ðò·ÃÎÊÒ»¸ö¾ÛºÏ¶ÔÏóÖи÷¸öÔªËØ, ¶øÓÖ²»Ð豩¶¸Ã¶ÔÏóµÄÄÚ²¿±íʾ¡£»òÕßÕâÑù˵¿ÉÄܸüÈÝÒ×Àí½â£ºIteratorģʽÊÇÔËÓÃÓھۺ϶ÔÏóµÄÒ»ÖÖģʽ£¬Í¨¹ýÔËÓøÃģʽ£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÔÚ²»ÖªµÀ¶ÔÏóÄÚ²¿±íʾµÄÇé¿öÏ£¬°´ÕÕÒ»¶¨Ë³Ðò£¨ÓÉiteratorÌṩµÄ·½·¨£©·ÃÎʾۺ϶ÔÏóÖеĸ÷¸öÔªËØ¡£
µü´úÆ÷µÄ×÷ÓãºÄܹ»Èõü´úÆ÷ÓëËã·¨²»¸ÉÈŵÄÏ໥·¢Õ¹£¬×îºóÓÖÄÜÎÞ¼ä϶µÄÕ³ºÏÆðÀ´£¬ÖØÔØÁË*£¬£«£«£¬£½£½£¬£¡£½£¬£½ÔËËã·û¡£ÓÃÒÔ²Ù×÷¸´ÔÓµÄÊý¾Ý½á¹¹£¬ÈÝÆ÷Ìṩµü´úÆ÷£¬Ë㷨ʹÓõü´úÆ÷£»
³£¼ûµÄһЩµü´úÆ÷ÀàÐÍ£ºiterator¡¢const_iterator¡¢reverse_iteratorºÍconst_reverse_iterator
µü´úÆ÷Ò»°ãÉùÃ÷ʹÓÃʾÀý
vector<T>::iterator it;
list<T>::iterator it;
deque<T>::iterator it£»

            input         output
              \            /  
                forward
                     |
                bidirectional
                     |
               random access                                       
 
ҪעÒ⣬ÉÏÃæÕâͼ±í²¢²»ÊDZíÃ÷ËüÃÇÖ®¼äµÄ¼Ì³Ð¹ØÏµ£º¶øÖ»ÊÇÃèÊöÁ˵ü´úÆ÷µÄÖÖÀàºÍ½Ó¿Ú¡£´¦ÓÚͼ±íϲãµÄµü´úÆ÷¶¼ÊÇÏà¶ÔÓÚ´¦ÓÚͼ±íÉϲãµü´úÆ÷µÄÀ©Õż¯¡£ÀýÈ磺forwardµü´úÆ÷²»µ«ÓµÓÐinputºÍoutputµü´úÆ÷µÄËùÓй¦ÄÜ£¬»¹ÓµÓиü¶àµÄ¹¦ÄÜ¡£
¸÷¸öµü´úÆ÷µÄ¹¦ÄÜÈçÏ£º
µü´úÆ÷Àà±ð ˵Ã÷
ÊäÈë ´ÓÈÝÆ÷ÖжÁÈ¡ÔªËØ¡£ÊäÈëµü´úÆ÷Ö»ÄÜÒ»´Î¶ÁÈëÒ»¸öÔªËØÏòÇ°ÒÆ¶¯£¬
ÊäÈëµü´úÆ÷Ö»Ö§³ÖÒ»±éËã·¨£¬Í¬Ò»¸öÊäÈëµü´úÆ÷²»ÄÜÁ½±é±éÀúÒ»¸öÐòÁÐ
Êä³ö ÏòÈÝÆ÷ÖÐдÈëÔªËØ¡£Êä³öµü´úÆ÷Ö»ÄÜÒ»´ÎÒ»¸öÔªËØÏòÇ°ÒÆ¶¯¡£
Êä³öµü´úÆ÷Ö»Ö§³ÖÒ»±éËã·¨£¬Í³Ò»Êä³öµü´úÆ÷²»ÄÜÁ½´Î±éÀúÒ»¸öÐòÁÐ
ÕýÏò ×éºÏÊäÈëµü´úÆ÷ºÍÊä³öµü´úÆ÷µÄ¹¦ÄÜ£¬²¢±£ÁôÔÚÈÝÆ÷ÖеÄλÖÃ
Ë«Ïò ×éºÏÕýÏòµü´úÆ÷ºÍÄæÏòµü´úÆ÷µÄ¹¦ÄÜ£¬Ö§³Ö¶à±éËã·¨
Ëæ»ú·ÃÎÊ ×éºÏË«Ïòµü´úÆ÷µÄ¹¦ÄÜÓëÖ±½Ó·ÃÎÊÈÝÆ÷ÖÐÈκÎÔªËØµÄ¹¦ÄÜ£¬
¼´¿ÉÏòǰÏòºóÌø¹ýÈÎÒâ¸öÔªËØ
µü´úÆ÷µÄ²Ù×÷£º
ÿÖÖµü´úÆ÷¾ù¿É½øÐаüÀ¨±íÖÐǰһÖÖµü´úÆ÷¿É½øÐеIJÙ×÷¡£
µü´úÆ÷²Ù×÷ ˵Ã÷
ËùÓеü´úÆ÷
p++ ºóÖÃ×ÔÔöµü´úÆ÷
++p ǰÖÃ×ÔÔöµü´úÆ÷
ÊäÈëµü´úÆ÷
*p ¸´ÒýÓõü´úÆ÷£¬×÷ΪÓÒÖµ
p=p1 ½«Ò»¸öµü´úÆ÷¸³¸øÁíÒ»¸öµü´úÆ÷
p==p1 ±È½Ïµü´úÆ÷µÄÏàµÈÐÔ
p!=p1 ±È½Ïµü´úÆ÷µÄ²»µÈÐÔ
Êä³öµü´úÆ÷
*p ¸´ÒýÓõü´úÆ÷£¬×÷Ϊ×óÖµ
p=p1 ½«Ò»¸öµü´úÆ÷¸³¸øÁíÒ»¸öµü´úÆ÷
ÕýÏòµü´úÆ÷ ÌṩÊäÈëÊä³öµü´úÆ÷µÄËùÓй¦ÄÜ
Ë«Ïòµü´úÆ÷
--p ǰÖÃ×Ô¼õµü´úÆ÷
p-- ºóÖÃ×Ô¼õµü´úÆ÷
Ëæ»úµü´úÆ÷
p+=i ½«µü´úÆ÷µÝÔöiλ
p-=i ½«µü´úÆ÷µÝ¼õiλ
p+i ÔÚpλ¼ÓiλºóµÄµü´úÆ÷
p-i ÔÚpλ¼õiλºóµÄµü´úÆ÷
p[i] ·µ»ØpÎ»ÔªËØÆ«ÀëiλµÄÔªËØÒýÓÃ
p<p1 Èç¹ûµü´úÆ÷pµÄλÖÃÔÚp1ǰ£¬·µ»Øtrue£¬·ñÔò·µ»Øfalse
p<=p1 pµÄλÖÃÔÚp1µÄÇ°Ãæ»òͬһλÖÃʱ·µ»Øtrue£¬·ñÔò·µ»Øfalse
p>p1 Èç¹ûµü´úÆ÷pµÄλÖÃÔÚp1ºó£¬·µ»Øtrue£¬·ñÔò·µ»Øfalse
p>=p1 pµÄλÖÃÔÚp1µÄºóÃæ»òͬһλÖÃʱ·µ»Øtrue£¬·ñÔò·µ»Øfalse
Ö»ÓÐ˳ÐòÈÝÆ÷ºÍ¹ØÁªÈÝÆ÷Ö§³Öµü´úÆ÷±éÀú£¬¸÷ÈÝÆ÷Ö§³ÖµÄµü´úÆ÷µÄÀà±ðÈçÏ£º
ÈÝÆ÷ Ö§³ÖµÄµü´úÆ÷Àà±ð ˵Ã÷
vector Ëæ»ú·ÃÎÊ Ò»ÖÖËæ»ú·ÃÎʵÄÊý×éÀàÐÍ£¬ÌṩÁ˶ÔÊý×éÔªËØ½øÐпìËÙËæ»ú·ÃÎÊÒÔ¼°ÔÚÐòÁÐβ²¿½øÐпìËٵIJåÈëºÍɾ³ý²Ù×÷µÄ¹¦ÄÜ¡£¿ÉÒÔÔÙÐèÒªµÄʱºòÐÞ¸ÄÆä×ÔÉíµÄ´óС
deque Ëæ»ú·ÃÎÊ Ò»ÖÖËæ»ú·ÃÎʵÄÊý×éÀàÐÍ£¬ÌṩÁËÐòÁÐÁ½¶Ë¿ìËÙ½øÐвåÈëºÍɾ³ý²Ù×÷µÄ¹¦ÄÜ¡£¿ÉÒÔÔÙÐèÒªµÄʱºòÐÞ¸ÄÆä×ÔÉíµÄ´óС
list Ë«Ïò Ò»ÖÖ²»Ö§³ÖËæ»ú·ÃÎʵÄÊý×éÀàÐÍ£¬²åÈëºÍɾ³ýËù»¨·ÑµÄʱ¼äÊǹ̶¨µÄ£¬ÓëλÖÃÎ޹ء£
set Ë«Ïò Ò»ÖÖËæ»ú´æÈ¡µÄÈÝÆ÷£¬Æä¹Ø¼ü×ÖºÍÊý¾ÝÔªËØÊÇͬһ¸öÖµ¡£ËùÓÐÔªËØ¶¼±ØÐë¾ßÓÐΩһֵ¡£
multiset Ë«Ïò Ò»ÖÖËæ»ú´æÈ¡µÄÈÝÆ÷£¬Æä¹Ø¼ü×ÖºÍÊý¾ÝÔªËØÊÇͬһ¸öÖµ¡£¿ÉÒÔ°üº¬Öظ´µÄÔªËØ¡£
map Ë«Ïò Ò»ÖÖ°üº¬³É¶ÔÊýÖµµÄÈÝÆ÷£¬Ò»¸öÖµÊÇʵ¼ÊÊý¾ÝÖµ£¬ÁíÒ»¸öÊÇÓÃÀ´Ñ°ÕÒÊý¾ÝµÄ¹Ø¼ü×Ö¡£Ò»¸öÌØ¶¨µÄ¹Ø¼ü×ÖÖ»ÄÜÓëÒ»¸öÔªËØ¹ØÁª¡£
multimap Ë«Ïò Ò»ÖÖ°üº¬³É¶ÔÊýÖµµÄÈÝÆ÷£¬Ò»¸öÖµÊÇʵ¼ÊÊý¾ÝÖµ£¬ÁíÒ»¸öÊÇÓÃÀ´Ñ°ÕÒÊý¾ÝµÄ¹Ø¼ü×Ö¡£Ò»¸ö¹Ø¼ü×Ö¿ÉÒÔÓë¶à¸öÊý¾ÝÔªËØ¹ØÁª¡£
stack ²»Ö§³Ö ÊÊÅäÆ÷ÈÝÆ÷ÀàÐÍ£¬ÓÃvector£¬deque»òlist¶ÔÏó´´½¨ÁËÒ»¸öÏȽøºó³öÈÝÆ÷
queue ²»Ö§³Ö ÊÊÅäÆ÷ÈÝÆ÷ÀàÐÍ£¬ÓÃdeque»òlist¶ÔÏó´´½¨ÁËÒ»¸öÏȽøÏȳöÈÝÆ÷
priority_queue ²»Ö§³Ö ÊÊÅäÆ÷ÈÝÆ÷ÀàÐÍ£¬ÓÃvector»òdeque¶ÔÏó´´½¨ÁËÒ»¸öÅÅÐò¶ÓÁÐ

 ±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍC++ÅàѵѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
×÷ÕߣºÀÖÓã²¥¿ÍC/C++ÅàѵѧԺ
Ê×·¢£ºhttp://www.itcast.cn/c/ 
0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿