Ò»¡¢Ò»°ã½éÉÜ
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/