HTML5¼¼Êõ

[¼¼Êõ] OIerµÄSTLÈëÃÅ½Ì³Ì - rvalue(7)

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2017-08-06 09:01 ÎÒÒªÆÀÂÛ( )

ÎÒÃÇ¿ÉÒÔʹÓà std::sort std::unique ºÍ std::lower_bound ÅäºÏʹÓÃÀ´ÊµÏÖÀëÉ¢»¯. Ê×Ïȸ´ÖÆÒ»·Ý´ýÀëÉ¢»¯µÄÊý¾Ýµ½ÁíÒ»¸öÊý×é, È»ºó¶Ô¸ÃÊý×é½øÐÐÅÅÐò²¢È¥ÖØ, È»ºó¿ÉÒÔÑ¡Ôñ $O(nlog(n))$ Ô¤´¦ÀíÖÁÒ»¸öÊý×é±£´æ²¢ÔÚ $O(

ÎÒÃÇ¿ÉÒÔʹÓà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)

±¾ÎÄÒÀÈ»²»¶¨ÆÚ¸üÐÂ.

¡¡

1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎתÔصĸå¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬ÇëתÔØʱÎñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

Ïà¹ØÎÄÕÂ
  • GitHub ÈëÃÅ½Ì³Ì - Ï÷΢º®

    GitHub ÈëÃÅ½Ì³Ì - Ï÷΢º®

    2017-07-22 11:00

  • ÊÇʲôÓÅ»¯Èà .NET Core ÐÔÄÜì­Éý£¿ - ÆÏÌѳǿؼþ¼¼ÊõÍŶÓ

    ÊÇʲôÓÅ»¯Èà .NET Core ÐÔÄÜì­Éý£¿ - ÆÏÌѳǿؼþ¼¼ÊõÍŶÓ

    2017-07-17 17:00

  • ¼¼ÊõÈËÉúµÄÖ°³¡ÖÚÉúÏà - Ê®¶àÄêµÄ¾­ÑéÓëÐĵà - Áé¸ÐÖ®Ô´

    ¼¼ÊõÈËÉúµÄÖ°³¡ÖÚÉúÏà - Ê®¶àÄêµÄ¾­ÑéÓëÐĵà - Áé¸ÐÖ®Ô´

    2017-07-16 17:10

  • Vuejs¼¼ÊõÕ»´ÓCLIµ½´ò°üÉÏÏßʵսȫ½âÎö - ÍòÀïÇïɽ

    Vuejs¼¼ÊõÕ»´ÓCLIµ½´ò°üÉÏÏßʵսȫ½âÎö - ÍòÀïÇïɽ

    2017-06-28 15:00

ÍøÓѵãÆÀ
±