HTML5¼¼Êõ

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

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

ÊäÈëµü´úÆ÷Ö»ÄÜÒ»Ö±×ÔÔö, ²¢Í¨¹ýÕâÑùµÄ·½Ê½±éÀúÈÝÆ÷. ²»¹ýÊäÈëµü´úÆ÷±Èµü´úÆ÷µÄ»ù´¡¶¨Òå¶àÁËÒ»¸ö¹¦ÄÜ: ÅеÈ. µ«ÊÇÓÐЩɥ²¡µÄÊÇÔÚÕâ¸öµü´úÆ÷×ÔÔöÖ®ºó, Ô­À´Ö¸ÏòµÄÔªËØ¿ÉÄÜʧЧ. ÕâÖÖÇé¿ö¿ÉÄÜ·¢ÉúÔÚÄãÊÔͼ¸´ÖÆÒ»¸öµü

ÊäÈëµü´úÆ÷Ö»ÄÜÒ»Ö±×ÔÔö, ²¢Í¨¹ýÕâÑùµÄ·½Ê½±éÀúÈÝÆ÷. ²»¹ýÊäÈëµü´úÆ÷±Èµü´úÆ÷µÄ»ù´¡¶¨Òå¶àÁËÒ»¸ö¹¦ÄÜ: ÅеÈ. µ«ÊÇÓÐЩɥ²¡µÄÊÇÔÚÕâ¸öµü´úÆ÷×ÔÔöÖ®ºó, Ô­À´Ö¸ÏòµÄÔªËØ¿ÉÄÜʧЧ. ÕâÖÖÇé¿ö¿ÉÄÜ·¢ÉúÔÚÄãÊÔͼ¸´ÖÆÒ»¸öµü´úÆ÷×÷Ϊ±¸·Ý, ²¢½«Ô­À´µÄµü´úÆ÷×ÔÔö, Ôò×ÔÔöºóÕâ¸ö±¸·ÝËùÖ¸ÏòµÄÄÚÈݲ»±£Ö¤ºÏ·¨ÐÔ. ¶øÇÒ²»±£Ö¤¿ÉÒÔ¸ù¾ÝÕâ¸öµü´úÆ÷ºÏ·¨µØÏòÕâ¸öµü´úÆ÷ËùÖ¸ÏòµÄÄÚÈݽøÐÐдÈë.

2.2.2 ÏòÇ°µü´úÆ÷

ÏòÇ°µü´úÆ÷ºÍÊäÈëµü´úÆ÷Ò»ÑùÒ²Ö»ÄܽøÐÐ×ÔÔöÇÒ¿ÉÒÔÅеÈ, µ«ÊÇÏòÇ°µü´úÆ÷±ÈÊäÈëµü´úÆ÷¶àÁËÒ»²ã±£Ö¤: µü´úÆ÷×ÔÔöºóԭλÖÃÒÀÈ»ºÏ·¨.

ÑϸñÀ´ËµÕâ¸ö¶«Î÷½Ð×ö¶àÌ˱£Ö¤, ¾ßÌ嶨ÒåÕªÒ»ÏÂ:

¶àÌ˱£Ö¤

¸ø¶¨ a ºÍ b £¬ÀàÐÍ It µÄ¿É½âÒýÓõü´úÆ÷

2.2.3 Ë«Ïòµü´úÆ÷

Ë«Ïòµü´úÆ÷Ê×ÏÈÂú×ãÏòÇ°µü´úÆ÷×÷ΪǰÖÃÌõ¼þ, È»ºóÈç×ÖÃæÒâ˼ËùÑÔ, Ë«Ïòµü´úÆ÷²»½ö¿ÉÒÔÖ§³Öµ¥·½ÏòµÄ×ÔÔö²Ù×÷, »¹Ö§³Ö·´·½Ïò¶¨Î»µÄ×Ô¼õ²Ù×÷. ÉÏÃæËùÊöµÄÈýÖÖµü´úÆ÷¶¼ÊÇÒ»´ÎÖ»Äܶ¨Î»Ò»¸öÔªËصľàÀë.

2.2.4 Ëæ»ú·ÃÎʵü´úÆ÷

Ëæ»ú·ÃÎʵü´úÆ÷ÊÇ×ÔÓɶÈ×î´óµÄ, ¿ÉÒÔÖ¸¶¨ÕûÊýÆ«ÒÆÁ¿À´ÈÎÒâÒƶ¯¶¨Î»µü´úÆ÷²¢·ÃÎÊÔªËØ. ¶øÇÒ¶ÔÓÚÁ½¸öËæ»ú·ÃÎʵü´úÆ÷»¹¿ÉÒÔÏà¼õÇó¶þÕßÖ®¼äÏà¾àµÄÔªËظöÊý, ÅжÏÁ½¸öµü´úÆ÷µÄÇ°ºóλÖùØϵ(´óÓÚ/СÓÚ/µÈÓÚ/²»´óÓÚ/²»Ð¡ÓÚµÈÔËËã·û)

2.2.5 Êä³öµü´úÆ÷

Êä³öµü´úÆ÷µÄ¸ÅÄîÆäʵֻҪÂú×ãÊǵü´úÆ÷¶øÇÒÕâ¸öµü´úÆ÷ËùÖ¸ÏòµÄÄÚÈÝ¿ÉÒÔдÈëÊý¾Ý¼´¿É.

2.2.6 µü´úÆ÷×ÛÊö

ËäÈ»²»Í¬ÀàÐ͵ĵü´úÆ÷Óв»Í¬µÄÏÞÖÆ, µ«ÊÇÕâЩÏÞÖƲ¢²»ÊÇûÓÐÀíÓɵÄ, ±ÈÈç¶ÔÓÚ std::set , ËüµÄÄÚ²¿ÊµÏÖÊÇÒ»¿ÃƽºâÊ÷, ¶øÇÒûÓÐʵÏÖÃû´ÎÊ÷µÄ¹¦ÄÜ, ËùÒÔÄܱ£Ö¤Ê±¼ä¸´ÔÓ¶ÈΪ $O(log(n))$ µÄ²Ù×÷Ö»Óвéѯ¸Ãµü´úÆ÷µÄÇ°ÇýÓëºó¼Ì. ËùÒÔËüµÄµü´úÆ÷ÊÇÒ»¸öË«Ïòµü´úÆ÷. ¶ø std::vector ÓÉÓÚËüÁ¬Ðø´æ´¢µÄÌØÐÔËùÒÔ¿ÉÒÔÖ§³ÖËæ»ú¶¨Î», ±ÈÈçλÖà $+5$ »òÕß $-7$ .

ÆäʵÓëÆä˵²»Í¬ÖÖÀàµÄµü´úÆ÷Óв»Í¬µÄÏÞÖÆ, ²»Èç˵²»Í¬ÖÖÀàµÄµü´úÆ÷ÌṩÁË×Ô¼º¶ÔijÖÖ²Ù×÷ÊÇ·ñÖ§³ÖµÄ±£Ö¤. ±ÈÈçÐèÒªÓõ½¶þ·Ö²éÕҵĺ¯ÊýÐèÒªËæ»ú·ÃÎʵü´úÆ÷×÷Ϊ²ÎÊý, ÒòΪֻÓÐÕâÑù²ÅÄÜÈ¡µ½×îÖмäµÄÔªËØλÖÃ, µ±´«ÈëµÄµü´úÆ÷²»Âú×ãËæ»ú·ÃÎʵü´úÆ÷µÄÒªÇóʱ²éÕҾͻáÍË»¯ÎªÏßÐÔʱ¼ä¸´ÔÓ¶È; ¶øÏñ std::for_each ÕâÑùµÄº¯ÊýÔòÖ»ÐèÒªÒ»¸öÂú×ãÇ°Ïòµü´úÆ÷µÄÊä³öµü´úÆ÷¾ÍÐÐÁË. (²»¹ý¶þ·Ö²éÕÒºÃÏñ²»±ØÊÇÊä³öµü´úÆ÷233)

¸½:µü´úÆ÷ʹÓÃʾÀý:

1 #include <vector> 2 #include <iostream> main(){ 5 std::vector<int> v={1,9,2,4,7,5,6,8}; 6 for(std::vector<int>::iterator i=v.begin();i!=v.end();++i){ 7 std::cout<<*i<<std::endl; 8 } ; 10 }

 

2.3 Ëã·¨¿â

C++Ëã·¨¿âÖÐÌṩ´óÁ¿ÓÃ;µÄº¯Êý(ÀýÈç²éÕÒ¡¢ÅÅÐò¡¢¼ÆÊý¡¢²Ù×÷),ËüÃÇÔÚÔªËØ·¶Î§ÉϲÙ×÷. ËäÈ»Ëã·¨¿âÖеĺܶຯÊý¶¼¿ÉÒԱȽϿìµØÊÖд³öÀ´, µ«ÊÇÓÐʱºòÕýȷʹÓÃC++Ëã·¨¿â¿ÉÒÔ´ó·ù¾«¼òOI´úÂë²¢¼õÉÙÔÚÕâЩ»ù´¡²¿·ÖµÄÎÞÒâÒåµÍ´í(¶øÕâЩ´íÎó³£³£ÐèÒªºÜ³¤Ê±¼äµÄdebug²ÅÄÜ·¢ÏÖ.), ¶øÇÒËã·¨¿âÖеÄËã·¨ÍùÍù½øÐйýһЩÌØÊâÓÅ»¯Ê¹µÃ¿âº¯Êý³£³£±ÈÊÖд¿ì(STLºÍ±àÒëÆ÷¿ÉÄÜÓв»ÎªÈËÖªµÄpy½»Ò×). ×¢ÒⷶΧ¶¨ÒåΪ×ó±ÕÓÒ¿ªÇø¼ä [first, last) , ÆäÖÐ last Ö¸ÏòÒª²éѯ»òÐ޸ĵÄ×îºóÔªËصĺóÒ»¸öÔªËØ.

¿âº¯Êý´ó¶à¶¼Äܵõ´òÊÖд, ¾ÍËãÄã×ÔÒÔΪÓÃÁËһЩ¿¨³£µÄÆæ¼¼ÒùÇÉÒ²ÒÀȻûÓÐÈκÎÂÑÓÃ. (±Ï¾¹È˼ÒÓн»Ò×Âï(´óÎí))

¶àÊýÉæ¼°±È½Ï»òÕßÅж¨µÄ¿âº¯Êý¶¼Ö§³Ö×Ô¶¨Òå±È½Ïº¯Êý»òÕßÅж¨º¯Êý, Ò»°ãÓ¦¸ÃÑ¡Ôñ´«constÒýÓûòÕß´«Öµ. ´«ÖµÒòΪҪ¸´ÖÆËùÒÔÒ»°ãÓжîÍ⿪Ïú, ½¨ÒéʹÓÃconstÒýÓÃ.

ÏÂÃæ½ö½éÉÜËã·¨¿âÖеIJ¿·ÖOI³£Óú¯Êý(²»È»Ì«¶à¸ù±¾Ã»·¨Ð´QAQ)

1. std::for_each 

½ÓÊÜÈý¸ö²ÎÊý: Á½¸öµü´úÆ÷ÓÃÓÚÖ¸¶¨²Ù×÷Çø¼ä, ×îºóÒ»¸öº¯Êý¶ÔÏóÓÃÓÚÖ´ÐвÙ×÷. FPרÊô²Ù×÷µÄζµÀ

2. std::count  std::count_if 

·Ö±ð½ÓÊÜÈý¸ö²ÎÊý, Ç°Á½¸ö¶¼ÊÇÁ½¸öµü´úÆ÷ÓÃÓÚÖ¸¶¨Çø¼ä, Ç°ÕߵĵÚÈý¸ö²ÎÊýΪһ¸öÖµ, ·µ»Ø¸ÃÖµÔÚÖ¸¶¨Çø¼äÄÚ³öÏֵĴÎÊý; ºóÕߵĵÚÈý¸ö²ÎÊýΪһ¸öº¯Êý¶ÔÏó, ½ÓÊÜÒ»¸ö¶ÔÓ¦µÄÖµ²¢·µ»Ø bool Öµ. count_if ¶ÔÓÚÖ¸¶¨Çø¼äÄÚÁîÖ¸¶¨º¯Êý·µ»Ø true µÄÖµ½øÐмÆÊý.

3. std::fill 

Èý¸ö²ÎÊý, Ç°Á½¸öµü´úÆ÷»®·Ö×ó±ÕÓÒ¿ªÇø¼ä, µÚÈý¸öΪһ¸öÀàÐͶÔÓ¦µÄÖµ. ×÷ÓÃΪ½«Ö¸¶¨Çø¼äÄڵĶÔÏóÈ«²¿ÉèÖÃΪָ¶¨Öµ. ¾Ý˵ÄÚ²¿Óжà·ÓÅ»¯ËùÒÔ±È×Ô¼ºÐ´Ñ­»·Òª¿ì¶øÇÒËƺõ²»»áÏñmemsetÒ»ÑùÆÆ»µSTL¼°ÆäËûÀàµÄÊý¾Ý½á¹¹?

4. std::fill_n 

Èý¸ö²ÎÊý, µÚÒ»¸öΪһ¸öµü´úÆ÷Ö¸¶¨Çø¼ä×ó¶Ë, µÚ¶þ¸öΪҪÐ޸ĵÄÔªËØÊýÄ¿, µÚÈý¸öΪҪÐ޸ĵÄÖµ. Óë std::fill ¹¦ÄÜÀàËÆ.

5. std::transform 

½«Ò»¸ö»òÁ½¸öÇø¼äÄÚµÄÖµ·Ö±ð´«¸øÒ»¸öÖ¸¶¨µÄº¯Êý²¢½«¼ÆËã½á¹û±£´æÔÚÁíÒ»¸öÇø¼äÄڵĶÔӦλÖÃ.

Á½¸öÖØÔØ, ·Ö±ð¶ÔÓ¦Ò»Ôªº¯ÊýÓë¶þÔªº¯Êý. ÏÈÊÇÁ½¸öµü´úÆ÷Ö¸¶¨²ÎÊýÇø¼ä, ¶þÔªº¯Êý»¹ÒªÔÙ¼ÓÒ»¸öµü´úÆ÷Ö¸¶¨µÚ¶þ¸ö²ÎÊýµÄÇø¼ä×ó¶Ë. È»ºóÊÇÒ»¸öµü´úÆ÷Ö¸¶¨Òª±£´æ½á¹ûµÄÇø¼äµÄ×ó¶Ë, ×îºóÊǺ¯Êý¶ÔÏó.

6. std::generate 

ÓÃÒ»¸öº¯ÊýµÄ·µ»ØÖµÌî³äÒ»¸öÇø¼ä. ÏÈÊÇÁ½¸öµü´úÆ÷»®·ÖÇø¼ä, µÚÈý¸ö²ÎÊýΪһ¸öº¯Êý. º¯ÊýµÄ·µ»ØÖµ½«±»ÓÃÓÚÒ»¸öÒ»¸öµØдÈëÖ¸¶¨Çø¼äÄÚ.

7. std::generate_n 

Óë std::generate ¹¦ÄÜÀàËÆ, ²»Í¬µÄÊÇÓÉÁ½¸öµü´úÆ÷»®·ÖÇø¼ä¸ÄΪÓÉÒ»¸öµü´úÆ÷ºÍÒ»¸ö¼ÆÊýÆ÷»®·ÖÇø¼ä.

8. std::remove  std::remove_if 

¡¡

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

ÍøÓѵãÆÀ
Ì