STLÓ¦ÓÃÂÛÎÄ

2021-06-13 ÂÛÎÄ

¡¡¡¡STLÊÇStandard Template LibraryµÄ¼ò³Æ£¬ÖÐÎÄÃû±ê׼ģ°å¿â£¬»ÝÆÕʵÑéÊÒ¿ª·¢µÄһϵÁÐÈí¼þµÄͳ³Æ¡£ÏÂÃæÊǹØÓÚÓйØSTLÓ¦ÓÃÂÛÎĵÄÄÚÈÝ£¬»¶Ó­ÔĶÁ£¡

¡¡¡¡STLÌṩÁù´ó×é¼þ£¬±Ë´Ë¿ÉÒÔ×éºÏÌ×ÓÃ

¡¡¡¡1¡¢ÈÝÆ÷£¨containers£©£º¸÷ÖÖÊý¾Ý½á¹¹£¬Èçvertor£¬list£¬deque£¬set£¬map.´ÓʵÏֵĽǶÈÀ´¿´£¬STLÈÝÆ÷ÊÇÒ»ÖÖclass template

¡¡¡¡2¡¢Ëã·¨£¨algorithms£©£º¸÷ÖÖËã·¨Èçsort£¬search£¬copy£¬earse¡£STLËã·¨ÊÇÒ»ÖÖ function template¡£

¡¡¡¡3¡¢µü´úÆ÷£¨iterators£©£º°çÑÝÈÝÆ÷ÓëËã·¨Ö®¼äµÄ½ººÏ¼Á£¬ÊÇËùνµÄ¡°·ºÐÍÖ¸Õ롱¡£ËùÓÐSTLÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄרÊôµÄµü´úÆ÷¡£

¡¡¡¡4¡¢·Âº¯Êý£¨functors£©£ºÐÐΪÀàËƺ¯Êý£¬¿ÉÒÔ×÷ΪËã·¨µÄijЩ²ßÂÔ¡£´ÓʵÏֵĽǶÈÀ´¿´£¬·Âº¯ÊýÊÇÒ»ÖÖÖØÔØÁËoperator()µÄclass»òclass template¡£

¡¡¡¡5¡¢Åä½ÓÆ÷£¨adapters£©£ºÒ»ÖÖÓÃÀ´ÐÞÊÎÈÝÆ÷»ò·Âº¯Êý»òµü´úÆ÷½è¿ÚµÄ¶«Î÷¡£ÀýÈçqueueºÍstack

¡¡¡¡6¡¢ÅäÖÃÆ÷£¨allocators£©£º¸ºÔð¿Õ¼äµÄÅäÖÃÓë¹ÜÀí¡£ÅäÖÃÆ÷ÊÇÒ»¸öʵÏÖÁ˶¯Ì¬¿Õ¼ä·ÖÅä¡¢¿Õ¼ä¹ÜÀí¡¢¿Õ¼äÊͷŵÄclass template¡£

¡¡¡¡STLÊǽ¨Á¢ÔÚ·º»¯Ö®Éϵġ£Êý×é·º»¯ÎªÈÝÆ÷£¬²ÎÊý»¯ÁËËù°üº¬µÄ¶ÔÏóµÄÀàÐÍ¡£º¯Êý·º»¯ÎªËã·¨£¬²ÎÊý»¯ÁËËùÓõĵü´úÆ÷µÄÀàÐÍ¡£Ö¸Õë·º»¯Îªµü´úÆ÷£¬²ÎÊý»¯ÁËËùÖ¸ÏòµÄ¶ÔÏóµÄÀàÐÍ¡£

¡¡¡¡vector¡¢string¡¢dequeºÍlist±»³ÆΪ±ê×¼ÐòÁÐÈÝÆ÷£¬

¡¡¡¡set¡¢multiset¡¢mapºÍmultimapÊDZê×¼¹ØÁªÈÝÆ÷¡£

¡¡¡¡·Ç±ê×¼ÐòÁÐÈÝÆ÷slistºÍrope¡£slistÊÇÒ»¸öµ¥ÏòÁ´±í£¬rope±¾ÖÊÉÏÊÇÒ»¸öÖØÐÍ×Ö·û´®¡£

¡¡¡¡·Ç±ê×¼¹ØÁªÈÝÆ÷hash_set¡¢hash_multiset¡¢hash_mapºÍhash_multimap¡£

¡¡¡¡±ê×¼·ÇSTLÈÝÆ÷£¬°üÀ¨Êý×é¡¢bitset¡¢valarray¡¢stack¡¢queueºÍpriority_queue¡£

¡¡¡¡µü´úÆ÷±»·Ö³ÉÎå¸öÖÖÀࣺ

¡¡¡¡ÊäÈëµü´úÆ÷ÊÇÿ¸öµü´úλÖÃÖ»Äܱ»¶ÁÒ»´ÎµÄÖ»¶Áµü´úÆ÷¡£

¡¡¡¡Êä³öµü´úÆ÷ÊÇÿ¸öµü´úλÖÃÖ»Äܱ»Ð´Ò»´ÎµÄֻдµü´úÆ÷¡£

¡¡¡¡ÊäÈëºÍÊä³öµü´úÆ÷±»ËÜÔìΪ¶ÁºÍдÊäÈëºÍÊä³öÁ÷£¨ÀýÈ磬Îļþ£©¡£

¡¡¡¡Ç°Ïòµü´úÆ÷ÓÐÊäÈëºÍÊä³öµü´úÆ÷µÄÄÜÁ¦£¬µ«ÊÇËüÃÇ¿ÉÒÔ·´¸´¶Á»òдһ¸öλÖá£

¡¡¡¡Ë«Ïòµü´úÆ÷¾ÍÏñÇ°Ïòµü´úÆ÷£¬³ýÁËËüÃǵĺóÍË¿ÉÒÔÏñÇ°½øÒ»ÑùÈÝÒס£±ê×¼¹ØÁªÈÝÆ÷¶¼Ìṩ˫Ïòµü´úÆ÷¡£listÒ²ÓС£

¡¡¡¡Á¬ÐøÄÚ´æÈÝÆ÷£¨Ò²½Ð×ö»ùÓÚÊý×éµÄÈÝÆ÷£©ÔÚÒ»¸ö»ò¶à¸ö£¨¶¯Ì¬·ÖÅ䣩µÄÄÚ´æ¿éÖб£´æËüÃǵÄÔªËØ¡£Èç¹ûÒ»¸öÐÂÔªËر»²éÈë»òÕßÒÑ´æÔªËر»É¾³ý£¬ÆäËûÔÚͬһ¸öÄÚ´æ¿éµÄÔªËؾͱØÐëÏòÉÏ»òÕßÏòÏÂÒƶ¯À´ÎªÐÂÔªËØÌṩ¿Õ¼ä»òÕßÌî³äÔ­À´±»É¾³ýµÄÔªËØËùÕ¼µÄ¿Õ¼ä¡£ÕâÖÖÒƶ¯Ó°ÏìÁËЧÂʺÍÒì³£°²È«¡£±ê×¼µÄÁ¬ÐøÄÚ´æÈÝÆ÷ÊÇvector¡¢stringºÍdeque¡£·Ç±ê×¼µÄropeÒ²ÊÇÁ¬ÐøÄÚ´æÈÝÆ÷¡£

¡¡¡¡»ùÓÚ½ÚµãµÄÈÝÆ÷ÔÚÿ¸öÄÚ´æ¿é£¨¶¯Ì¬·ÖÅ䣩ÖÐÖ»±£´æÒ»¸öÔªËØ¡£ÈÝÆ÷ÔªËصIJåÈë»òɾ³ýÖ»Ó°ÏìÖ¸Ïò½ÚµãµÄÖ¸Õ룬¶ø²»Êǽڵã×Ô¼ºµÄÄÚÈÝ¡£ËùÒÔµ±Óж«Î÷²åÈë»òɾ³ýʱ£¬ÔªËØÖµ²»ÐèÒªÒƶ¯¡£±íÏÖΪÁ´±íµÄÈÝÆ÷¡ª¡ª±ÈÈçlistºÍslist¡ª¡ªÊÇ»ùÓÚ½ÚµãµÄ£¬ËùÓеıê×¼¹ØÁªÈÝÆ÷Ò²ÊÇ£¨ËüÃǵĵäÐÍʵÏÖÊÇƽºâÊ÷£©¡£·Ç±ê×¼µÄÉ¢ÁÐÈÝÆ÷ʹÓò»Í¬µÄ»ùÓÚ½ÚµãµÄʵÏÖ¡£

¡¡¡¡1¡¢vector

¡¡¡¡vectorºÍÊý×éÀàËÆ£¬ËüÓµÓÐÒ»¶ÎÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬²¢ÇÒÆðʼµØÖ·²»±ä£¬Òò´ËËüÄܷdz£ºÃµÄÖ§³ÖËæ»ú´æÈ¡£¨¼´Ê¹ÓÃ[]²Ù×÷·û·ÃÎÊÆäÖеÄÔªËØ£©£¬µ«ÓÉÓÚËüµÄÄÚ´æ¿Õ¼äÊÇÁ¬ÐøµÄ£¬ËùÒÔÔÚÖмä½øÐвåÈëºÍɾ³ý»áÔì³ÉÄÚ´æ¿éµÄ¿½±´£¨¸´ÔÓ¶ÈÊÇO(n)£©£¬ÁíÍ⣬µ±¸ÃÊý×éºóµÄÄÚ´æ¿Õ¼ä²»¹»Ê±£¬ÐèÒªÖØÐÂÉêÇëÒ»¿é×ã¹»´óµÄÄÚ´æ²¢½øÐÐÄÚ´æµÄ¿½±´¡£ÕâЩ¶¼´ó´óÓ°ÏìÁËvectorµÄЧÂÊ¡£

¡¡¡¡vector²»ÊÇÒ»ÖÖÊý¾ÝÀàÐÍ£¬¶øÖ»ÊÇÒ»¸öÀàÄ£°å£¬¿ÉÓÃÀ´¶¨ÒåÈÎÒâ¶àÖÖÊý¾ÝÀàÐÍ¡£vectorÀàÐ͵ÄÿһÖÖ¶¼Ö¸¶¨ÁËÆä±£´æÔªËصÄÀàÐÍ¡£Òò´Ë£¬vectorºÍvector¶¼ÊÇÊý¾ÝÀàÐÍ¡£

¡¡¡¡vector¶ÔÏóµÄ¶¨ÒåºÍ³õʼ»¯

¡¡¡¡vectorv1;

¡¡¡¡vector±£´æÀàÐÍΪTµÄ¶ÔÏó¡£Ä¬ÈϹ¹Ô캯Êýv1Ϊ¿Õ¡£

¡¡¡¡vectorv2(v1);

¡¡¡¡v2ÊÇv1µÄÒ»¸ö¸±±¾¡£

¡¡¡¡vectorv3(n,i);

¡¡¡¡v3°üº¬n¸öֵΪiµÄÔªËØ¡£

¡¡¡¡vectorivec4(10, -1); // 10 elements, each initialized to -1

¡¡¡¡vectorsvec(10, "hi!"); // 10 strings, each initialized to "hi!"

¡¡¡¡vectorµÄ.²Ù×÷

¡¡¡¡v.empty()

¡¡¡¡Èç¹ûvΪ¿Õ£¬Ôò·µ»Øtrue,·ñÔò·µ»Øfalse¡£

¡¡¡¡v.size()

¡¡¡¡·µ»ØvÖÐÔªËصĸöÊý¡£

¡¡¡¡v.push_back(t)

¡¡¡¡ÔÚvµÄĩβÔö¼ÓÒ»¸öֵΪtµÄÔªËØ¡£

¡¡¡¡v[n]

¡¡¡¡·µ»ØvÖÐλÖÃΪnµÄÔªËØ¡£

¡¡¡¡v1=v2

¡¡¡¡°Ñv1µÄÔªËØÌ滻Ϊv2ÖÐÔªËصĸ±±¾¡£

¡¡¡¡v1==v2

¡¡¡¡Èç¹ûv1Óëv2ÏàµÈ£¬Ôò·µ»Øtrue¡£

¡¡¡¡!=, <, <=,>, >=

¡¡¡¡±£³ÖÕâЩ²Ù×÷·û¹ßÓеĺ¬Òå¡£

¡¡¡¡ÏòvectorÌí¼ÓÔªËØ:

¡¡¡¡¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡string word;

¡¡¡¡vectortext; // empty vector

¡¡¡¡while (cin >> word) {

¡¡¡¡text.push_back(word); // append word to text

¡¡¡¡}

¡¡¡¡vectorµÄϱê²Ù×÷:

¡¡¡¡for (vector::size_type ix = 0; ix != ivec.size(); ++ix)

¡¡¡¡ivec[ix] = 0;

¡¡¡¡vectorµü´úÆ÷

¡¡¡¡Ã¿ÖÖÈÝÆ÷¶¼¶¨ÒåÁËÒ»¶ÔÃüÃûΪbeginºÍendµÄº¯Êý£¬ÓÃÓÚ·µ»Øµü´úÆ÷¡£Èç¹ûÈÝÆ÷ÖÐÓÐÔªËصĻ°£¬ÓÉbegin·µ»ØµÄµü´úÆ÷Ö¸ÏòµÚÒ»¸öÔªËØ£º

¡¡¡¡¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡vector::iterator iter = ivec.begin();

¡¡¡¡ÓÉend²Ù×÷·µ»ØµÄµü´úÆ÷Ö¸ÏòvectorµÄ¡°Ä©¶ËÔªËصÄÏÂÒ»¸ö¡±¡£Í¨³£³ÆΪ³¬³öÄ©¶Ëµü´úÆ÷(off-the-end iterator)£¬±íÃ÷ËüÖ¸ÏòÁËÒ»¸ö²»´æÔÚµÄÔªËØ¡£Èç¹ûvectorΪ¿Õ£¬begin·µ»ØµÄµü´úÆ÷Óëend·µ»ØµÄµü´úÆ÷Ïàͬ¡£

¡¡¡¡¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡for (vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)

¡¡¡¡*iter = 0; // set element to which iter refers to 0

¡¡¡¡const_iterator

¡¡¡¡Ç°ÃæµÄ³ÌÐòÓÃvector::iterator¸Ä±ävectorÖеÄÔªËØÖµ¡£Ã¿ÖÖÈÝÆ÷ÀàÐÍ»¹¶¨ÒåÁËÒ»ÖÖÃûΪconst_iteratorµÄÀàÐÍ£¬¸ÃÀàÐÍÖ»ÄÜ·ÃÎÊÈÝÆ÷ÄÚÔªËØ£¬µ«²»ÄܸıäÆäÖµ¡£

¡¡¡¡¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡for (vector::const_iterator iter = text.begin(); iter != text.end(); ++ iter)

¡¡¡¡*iter = " "; // error: *iter is const

¡¡¡¡2¡¢list

¡¡¡¡listÊÇÓÉÊý¾Ý½á¹¹ÖеÄË«ÏòÁ´±íʵÏֵģ¬Òò´ËËüµÄÄÚ´æ¿Õ¼ä¿ÉÒÔÊDz»Á¬ÐøµÄ¡£Òò´ËÖ»ÄÜͨ¹ýÖ¸ÕëÀ´½øÐÐÊý¾ÝµÄ·ÃÎÊ£¬Õâ¸öÌصãʹµÃËüµÄËæ»ú´æÈ¡±äµÄ·Ç³£Ã»ÓÐЧÂÊ£¬ÐèÒª±éÀúÖмäµÄÔªËØ£¬ËÑË÷¸´ÔÓ¶ÈO(n)£¬Òò´ËËüûÓÐÌṩ[]²Ù×÷·ûµÄÖØÔØ¡£µ«ÓÉÓÚÁ´±íµÄÌص㣬Ëü¿ÉÒÔÒԺܺõÄЧÂÊÖ§³ÖÈÎÒâµØ·½µÄɾ³ýºÍ²åÈë¡£

¡¡¡¡list::iteratorÓëvector::iteratorµÄһЩ²»Í¬£º

¡¡¡¡¸´ÖÆ´úÂë ´úÂëÈçÏÂ:

¡¡¡¡#include

¡¡¡¡#include

¡¡¡¡#include

¡¡¡¡using namespace std;

¡¡¡¡int main( void )

¡¡¡¡{

¡¡¡¡vectorv;

¡¡¡¡listl;

¡¡¡¡for (int i=0; i<8; i++) //ÍùvºÍlÖзֱðÌí¼ÓÔªËØ

¡¡¡¡{

¡¡¡¡v.push_back(i);

¡¡¡¡l.push_back(i);

¡¡¡¡}

¡¡¡¡cout << "v[2] = " << v[2] << endl;

¡¡¡¡//cout << "l[2] = " << l[2] << endl; //±àÒë´íÎó,listûÓÐÖØÔØ[]

¡¡¡¡cout << (v.begin() < v.end()) << endl;

¡¡¡¡//cout << (l.begin() < l.end()) << endl; //±àÒë´íÎó,list::iteratorûÓÐÖØÔØ<»ò>

¡¡¡¡cout << *(v.begin() + 1) << endl;

¡¡¡¡vector::iterator itv = v.begin();

¡¡¡¡list::iterator itl = l.begin();

¡¡¡¡itv = itv + 2;

¡¡¡¡//itl = itl + 2; //±àÒë´íÎó,list::iteratorûÓÐÖØÔØ+

¡¡¡¡itl++;itl++; //list::iteratorÖÐÖØÔØÁË++£¬Ö»ÄÜʹÓÃ++½øÐеü´ú·ÃÎÊ¡£

¡¡¡¡cout << *itv << endl;

¡¡¡¡cout << *itl << endl;

¡¡¡¡return 0;

¡¡¡¡}

¡¡¡¡ÓÉÓÚvectorÓµÓÐÒ»¶ÎÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬Äܷdz£ºÃµÄÖ§³ÖËæ»ú´æÈ¡£¬Òò´Ëvector::iteratorÖ§³Ö¡°+¡±¡¢¡°+=¡±¡¢¡°<¡±µÈ²Ù×÷·û¡£

¡¡¡¡¶ølistµÄÄÚ´æ¿Õ¼ä¿ÉÒÔÊDz»Á¬Ðø£¬Ëü²»Ö§³ÖËæ»ú·ÃÎÊ£¬Òò´Ëlist::iteratorÔò²»Ö§³Ö¡°+¡±¡¢¡°+=¡±¡¢¡°<¡±µÈ²Ù×÷·ûÔËË㣬Òò´Ë´úÂë20¡¢26ÐлáÓбàÒë´íÎó¡£Ö»ÄÜʹÓá°++¡±½øÐеü´ú£¬ÀýÈç´úÂë27ÐУ¬Ê¹ÓÃÁ½´Îitl++À´Òƶ¯itl¡£»¹ÓÐlistÒ²²»Ö§³Ö[]ÔËËã·û£¬Òò´Ë´úÂë18ÐгöÏÖ±àÒë´íÎó¡£

¡¡¡¡×ÜÖ®£¬Èç¹ûÐèÒª¸ßЧµÄËæ¼´´æÈ¡£¬¶ø²»ÔÚºõ²åÈëºÍɾ³ýµÄЧÂÊ£¬Ê¹ÓÃvector£»Èç¹ûÐèÒª´óÁ¿µÄ²åÈëºÍɾ³ý£¬¶ø²»¹ØÐÄËæ¼´´æÈ¡£¬ÔòӦʹÓÃlist¡£

¡¡¡¡vectorÓµÓÐÒ»¶ÎÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬Òò´ËÖ§³ÖËæ»ú´æÈ¡£¬Èç¹ûÐèÒª¸ßЧµÄËæ¼´´æÈ¡£¬¶ø²»ÔÚºõ²åÈëºÍɾ³ýµÄЧÂÊ£¬Ê¹ÓÃvector¡£

¡¡¡¡listÓµÓÐÒ»¶Î²»Á¬ÐøµÄÄÚ´æ¿Õ¼ä£¬Òò´ËÖ§³ÖËæ»ú´æÈ¡£¬Èç¹ûÐèÒª´óÁ¿µÄ²åÈëºÍɾ³ý£¬¶ø²»¹ØÐÄËæ¼´´æÈ¡£¬ÔòӦʹÓÃlist¡£µ±´ó²¿·Ö²åÈëºÍɾ³ý·¢ÉúÔÚÐòÁеÄÍ·»òβʱ¿ÉÒÔÑ¡ÔñdequeÕâÖÖÊý¾Ý½á¹¹¡£

¡¾STLÓ¦ÓÃÂÛÎÄ¡¿Ïà¹ØÎÄÕ£º

ÍøÂçµÄÓ¦ÓÃÂÛÎÄ02-25

Ó¦ÓÃÁÖÒµ¿Æ¼¼ÂÛÎÄ06-25

ÐÅÏ¢¼ìË÷ÓëÓ¦ÓÃÂÛÎÄ04-11

ÂÛÎÄ£ºÉ«²Ê¿Õ¼äµÄÓ¦ÓÃ07-02

ERP¿ª·¢µÄÓ¦ÓÃÂÛÎÄ04-13

PBL½ÌѧµÄÓ¦ÓÃÂÛÎÄ06-19

EVAµÄº¬ÒåÓëÓ¦ÓÃÂÛÎÄ06-19

¼òµ¥ËµËµºÎΪ֮STLµÄÄÚ´æ¹ÜÀíAllocator05-07

¹âÏËͨÐŵÄÓ¦ÓÃÂÛÎÄ06-10