ÎÒÃÇ¿ÉÒÔʹÓà std::sort std::unique ºÍ std::lower_bound ÅäºÏʹÓÃÀ´ÊµÏÖÀëÉ¢»¯. Ê×Ïȸ´ÖÆÒ»·Ý´ýÀëÉ¢»¯µÄÊý¾Ýµ½ÁíÒ»¸öÊý×é, È»ºó¶Ô¸ÃÊý×é½øÐÐÅÅÐò²¢È¥ÖØ, È»ºó¿ÉÒÔÑ¡Ôñ $O(nlog(n))$ Ô¤´¦ÀíÖÁÒ»¸öÊý×é±£´æ²¢ÔÚ $O(1)$ ʱ¼äÄÚÏàÓ¦²éѯ, »òÕß²»Ô¤´¦Àíÿ´ÎÖ±½Ó $O(log(n))$ ²éѯ. ²éѯÓëÔ¤´¦ÀíµÄ¹ý³Ì¶¼ÊÇÄÃÊý¾ÝÔÚÅÅÐò²¢È¥ÖغóµÄÊý×éÖжþ·Ö²éÕÒ, È»ºó½«·µ»ØµÄÖ¸Õë¼õÈ¥Êý×éÆðʼλÖõÄÖ¸ÕëÀ´»ñµÃϱê. Õâ¸öϱêµÄÖµ¼´ÎªÀëÉ¢»¯ºóµÄÖµ.
3.2 ¿ìËÙÇå¿ÕÈÝÆ÷ÊÊÅäÆ÷ÈçÉÏÎÄËùÊö, ÈÝÆ÷ÊÊÅäÆ÷¶¼**É¥²¡µØ²»Ö§³ÖÇå¿Õ²Ù×÷, ÕâʱºÜ¶àOIerΪÁËÇå¿Õ¾Í»áд³ö½´ÉôµÄ´üÂí:
while(!q.empty()){ q.pop(); }
¿´ÆðÀ´¾ÍºÜµÍЧµÄÑù×Ó(ËäÈ»¶ÔÓÚÕ»ºÍ¶ÓÁÐÀ´ËµÊ±¼ä¸´ÔӶȴﵽÁËÀíÂÛϽç, µ«Êdz£ÊýÏÔÈ»±ÈÖ±½ÓÇå¿ÕÒª´ó, ÖÁÓÚÓÅÏȶÓÁоÍÖ±½Ó´Ó $O(n)$ ¹Ò³É $O(nlog(n))$ ÁË...)
ÕâÖÖʱºò¾ÍÓ¦¸ÃÉÏÎÒÃǵÄÍòÄÜSTLÈÝÆ÷Çå¿Õº¯Êý(Îí)
template<class T> void Clear(T& x){ T tmp; std::swap(tmp,x); }
¼ò½à, ÇåÎú(´óÎí)
¿ÉÒÔ¿´µ½ÎÒÃÇÔÚº¯ÊýÄÚÉùÃ÷ÁËÒ»¸ö¾Ö²¿¶ÔÏó $tmp$, ¸Ã¶ÔÏóÀàÐÍÓë²ÎÊýÏàͬ. Õâ¸öн¨µÄÈÝÆ÷±Ø¶¨Îª¿Õ, ËùÒÔÎÒÃǽ»»»ÁËÁ½¸ö¶ÔÏóµÄÖµ. (×¢:ÓÉÓÚSTLÈÝÆ÷¶¼ÌØ»¯ÁË std::swap µÄʵÏÖËùÒÔ²»Óõ£ÐÄʱ¼ä¸´ÔÓ¶ÈÎÊÌâ) È»ºóÇÉÃîµÄµØ·½ÔÚÓÚ, $tmp$ ÔÚº¯ÊýÖ´ÐнáÊøºó×Ô¶¯Îö¹¹, Ò²¾ÍÊÇ´ø×Å $x$ ÔÀ´µÄÖµ×Ô¶¯Îö¹¹ÁË...
È»ºóÓÉÓÚÎÒÃÇ´«µÄÊÇÒýÓÃËùÒÔÎÒÃÇ»ªÀöÀöµØ»ñµÃÁËÒ»¸öеĿյÄÈÝÆ÷ $x$
3.3 ¿ìËÙɾ³ý¶Ñ/ÓÅÏȶÓÁжÓÖеÄÔªËØÓÐʱºòÎÒÃÇ»áʹÓöѻòÕßÓÅÏȶÓÁÐÀ´½øÐÐһЩɨÃè/Ì°ÐÄ/ÓÅ»¯µÈ¹ý³Ì, È»¶øÓÐʱºòÎÒÃÇ¿ÉÄÜ»áÐèҪɾ³ý¶ÑÖеÄÔªËضø·Ç¶Ñ¶¥. È»¶øSTLµÄ¶Ñ²¢²»ÌṩÕâЩº¯Êý, ¶øÊÖд¶ÑËƺõÒ²²»ºÃʵÏÖ. ÕâʱÎÒÃÇ¿ÉÒÔ²ÉȡһЩÆæ¹ÖµÄ˼·: ½¨Á¢Ò»¸ö "À¬»ø¶Ñ" , ÿ´ÎҪɾ³ý¶ÑÖеÄij¸öÔªËØʱֱ½ÓѹÈëÀ¬»ø¶Ñ¶¥, ¶ø´ÓԶѶѶ¥È¡ÔªËØʱÅжÏÒ»ÏÂ:
1.Èç¹ûÁ½¶Ñ¶Ñ¶¥ÏàµÈÔòÖ±½Óͬʱµ¯³ö;
2.Èç¹ûԶѶѶ¥Ð¡ÓÚÀ¬»ø¶Ñ¶Ñ¶¥Ôò˵Ã÷Ôø¾ÓÐÒ»¸öÊÔͼɾ³ýµÄÖµÔÚÔ¶ÑÖв»´æÔÚ, µ¯µôÀ¬»ø¶Ñ¶Ñ¶¥;
3.Èç¹ûԶѶѶ¥´óÓÚÀ¬»ø¶Ñ¶Ñ¶¥, ԶѶѶ¥±£Ö¤´æÔÚ, ¸ÃÖµ¼´ÎªÕæÕýµÄ¶Ñ¶¥.
ÒÔÉÏËã·¨ÕýÈ·ÐÔÓ¦¸Ã²»ÄÑÀí½â. ´Ë´¦²»ÔÙ¸ø³öÏêϸ֤Ã÷(Æäʵ¾ÍÊÇÀÁ)
3.4 STLÐÔÄÜÏà¹Ø¿ÉÄÜÐí¶àOIer¶¼ÓÐÒ»¸ö´íÎóµÄ¹ÛÄî: STLÂý³öÏè, ³ýÁËÒ»¸ö std::sort ¿ÉÒÔµõ´òÊÖд֮Íâ¾³£±»¿¨³£
¿¨³£³öÌâÈ˱¾¾Í¸Ã±»¹ÒÆðÀ´ñÑ, ÉñÌØôÓÐÀíÓоݵĵײãÓÅ»¯(´óÎí)
È»¶øÕæʵ½á¹ûÊÇ: ²».
ΪʲôSTLƽ³£¿´ÆðÀ´ÄÇôÂý?
STLÈÝÆ÷£¬Ö»Òª»á¸øÄãµü´úÆ÷Óõģ¬¶¼»áÔÚdebugģʽÏÂÄÚÖÃÒ»¸öḬ̈߳²È«µÄÁ´±í£¬¶ÔÄÚÖÃÒ»¸öÁ´±í£¬ÓÃÀ´±£´æËͳöÈ¥µÄµü´úÆ÷£¬Ã¿´ÎÄãµÄµü´úÆ÷²Ù×÷¶¼»á½øÕâ¸öÁ´±íÀïÏßÐÔɨÃèÒ»±é£¬¼ì²éÏÂÄãµÄµü´úÆ÷ÊÇ·ñºÏ·¨£¬Ḭ̈߳²È«µÄŶ£¬ÓÐËøµÄŶ£¬Õâ¸öÁ´±í»¹×Ô´øallocatorµÄŶ
STLËã·¨£¬Ö»ÒªÓÃÁ˱ȽÏÆ÷µÄ£¬debugÔËÐÐʱ£¬Ã¿´Îµ÷ÓÃ֮ǰ£¬¶¼»á¶ÔÄãµÄ±È½ÏÆ÷½øÐм¸´ÎÓàÏÈÑéÖ¤£¬ÑéÖ¤±È½ÏÆ÷¶ÔÓÚÕâÒ»×éÊý¾ÝÊDz»ÊÇÕæÂú×ãÆ«Ðò¹Øϵ/µÈ¼Û¹Øϵ
STLÈÝÆ÷±¾ÉíÓÃÁ˸÷ÖÖtraits¼¼ÊõºÍº¯ÊýÖØÔؽøÐÐת·¢£¬¸ß¶ÈÒÀÀµ±àÒëÄÚÁªÓÅ»¯×÷ÕߣºÄäÃûÓû§
Á´½Ó£ºhttps://www.zhihu.com/question/51650118/answer/126855487
À´Ô´£ºÖªºõ
(̯ÊÖ)
¹ØµôDebug²¢¿ª-O2Ö®ºó»ù±¾²»¿ÉÄÜÓÐ˵ÄÊÖд´úÂëÄÜ×öµ½STLµÄËÙ¶È.
»¹ºÃ, ÏÖÔÚ¸÷·OI±ÈÈü¶¼¿ªÊ¼ÏòÇ°¿´²¢×Ì´ÅO2ÓÅ»¯Á˶øÇÒÓÅ»¯Ö®ºóÅܵñȸۼǿ쵽²»ÖªÄÄÀïÈ¥ÁË
ÅäºÏHEÊ¡³¬ÉñÆÀ²â¼§»ù±¾Î޵еĴæÔÚ233333 ( $10^{10}$ Ñ»·Ö»ÅÜ $4s$ µÄÁù´úi5¾ÍÎÊÄãË˲»ËË....)
ÒÔ¼°Ò»Ð©±Ø¶¨µõ´òÊÖдµÄ¿âº¯Êý:
std::sort std::swap std::min std::max
ÉÏÃ漸¸ö¼òµ¥º¯Êý²»ÒªÏë×ÅÊÖд, Ö±½Óµ÷¿â...
¶ÔÓÚ std::swap , ¿ÉÄÜÓеÄOIerѧϰ lrj dalaoʹÓÃÕâÑùµÄд·¨:
void Swap(int& a,int& b){ a^=b^=a^=b; }
È»ºóÄã·¢ÏÖÄãUBÁË...·Ç³£ÈÝÒ×Õ¨µÄд·¨.
¾ÍËãÄã²ð¿ªÃ¿Ò»ÐÐÈÃËü²»UB:
void Swap(int& a,int& b){ a^=b; b^=a; a^=b; }
È»¶øÖ»ÊÇƾ¿ÕÍÏÂýËٶȰÕÁË...
ΪɶÄØ? ÕýÊÇÒòΪ¶àÁËÄÇÈý´Î¿´ÆðÀ´ºÜÆæ¼¼ÒùÇɵÄλÔËËã...ÒòΪ¿âº¯ÊýÓÅ»¯ºóÖ±½ÓÔڼĴæÆ÷ÀïmovÈ»ºóÈÓRAMÍêÊÂw
¶øÇÒ»¹»á´æÔÚÒ»¸öÑÏÖصÄÎÊÌâ: Swapͬһ¸ö±äÁ¿µÄʱºò»á°ÑËüSwap³É $0$ ......(ͻȻ»¬»ü.png)
4.½áÓï
STLÊǸö·Ç³£ÓÐÓõÄC++ÌØÐÔ, Ö»ÒªÕýȷʹÓÃ, ²»½ö¿ÉÒÔÌá¸ß´úÂ뾫¼ò³Ì¶È, »¹¿ÉÒÔ½«ÄãµÄ¾«Á¦¾Û½¹µ½ºËÐÄËã·¨¶ø²»ÊÇһЩÆäËûµÄϸ½Ú, ²¢ÓÉ´ËÌá¸ß×öÌâËÙ¶ÈÓëËã·¨ÄÜÁ¦. ±¾ÎĽö½ö×öÁ˺ܼòµ¥µÄ½éÉܾÍÒѾ³¤µ½ÁËÕâÑùµÄµØ²½, ¿ÉÏë¶øÖªSTL»¹ÓиüÉîµÄË®. ±ÈÈç¿âº¯ÊýµÄ¶à¸öÖØÔØ/×Ô¶¨ÒåÄÚ´æ·ÖÅäÆ÷/×Ô¶¨ÒåÖ´ÐÐģʽ/µü´úÆ÷ºÍÈÝÆ÷µÄ¸ß¼¶Ó÷¨ÓëǶÌ׵ȵÈ. Èç¹ûÏëÒªÉîÈëÁ˽âSTLµÄÓ÷¨Óë¸ß¼¶ÌØÐÔ, ¿ÉÒԲο¼ cplusplus.com zh.cppreference.com wikipedia »òÕßÖ±½Ó²Î¿¼±ê×¼Îĵµ. Èç¹ûΪÁË·ÀÖ¹°æȨÕùÒé¿ÉÒÔ²éÔÄC++14±ê×¼·¢²¼Ç°µÄ×îºóÒ»¸öWorking Draft (n4140.pdf)
±¾ÎÄÒÀÈ»²»¶¨ÆÚ¸üÐÂ.
¡¡