6.1 list µ¥ÀÌÅÍ Ãß»ó(data abstraction) vector µ¥ÀÌÅÍ ±¸Á¶´Â ´Ù¸¥ °Í¿¡ ºñÇØ »ó´ëÀûÀ¸·Î »çÀÌÁî°¡ °íÁ¤µÇ¾î ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù. vectorÀÇ »çÀÌÁ µ¿ÀûÀ¸·Î º¯È­½Ãų¼ö ÀÖ´Â ¿¬»êÀÌ Á¦°øµÇ±ä ÇÏÁö¸¸, ÀÌ·¯ÇÑ ¿¬»êµéÀº ºñ½Î±â ¶§¹®¿¡ ÀÚÁÖ »ç¿ëÇؼ­´Â ¾ÈµÈ´Ù. ±×¸®°í, ´ëºÎºÐÀÇ °æ¿ì¿¡, ÄÝ·º¼ÇÀÇ »çÀÌÁî´Â ¹Ì¸® ¿¹ÃøÇϱⰡ Èûµé°í, ½ÇÇà Áß¿¡µµ »ó´çÈ÷ ´Ù¾çÇÏ°Ô º¯È­ÇÑ´Ù. µû¶ó¼­, ÀÌ·¯ÇÑ °æ¿ì¿¡´Â ´Ù¸¥ µ¥ÀÌÅÍ ±¸Á¶¸¦ µµÀÔÇØ¾ß Çϴµ¥, ÀÌ Àý¿¡¼­´Â ±×·¯ÇÑ »óȲ¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Â µ¥ÀÌÅÍ ±¸Á¶ÀÇ ÇϳªÀÎ list¿¡ °üÇØ »ìÆ캸±â·Î ÇÑ´Ù. list´Â ÀÏ·Ä·Î ³ª¿­µÈ ¿ø¼ÒµéÀ» Ãß»óÈ­ÇÑ °³³äÀÌ´Ù. listÀÇ ¾ÕÂÊ°ú µÞÂÊ¿¡¼­ »õ·Î¿î °ªÀ» »ðÀÔÇϰųª »èÁ¦ÇÒ ¼ö ÀÖÀ¸¸ç, ¹Ýº¹ÀÚ·Î À§Ä¡¸¦ ÁöÁ¤ÇÏ¿© listÀÇ Áß°£¿¡¼­µµ ¿ø¼ÒµéÀ» Ãß°¡Çϰųª »èÁ¦ÇÒ ¼ö ÀÖ´Ù. ¸ðµç °æ¿ì¿¡ ´ëÇؼ­, »ðÀÔ ¿¬»ê°ú »èÁ¦¿¬»êÀº Ç×»ó È¿À²ÀûÀ̸ç, ÄÝ·º¼ÇÀÌ °¡Áö°í ÀÖ´Â ¿ø¼ÒµéÀÇ °¹¼ö¿Í´Â »ó°ü¾øÀÌ »ó¼ö½Ã°£³»¿¡ ¼öÇàµÈ´Ù. ¸¶Áö¸·À¸·Î, list´Â ¼±Çü ±¸Á¶ÀÌ´Ù. listÀÇ ¿ø¼ÒµéÀº ÷ÀÚ¿¡ ÀÇÇؼ­´Â Á¢±ÙÀÌ ºÒ°¡´ÉÇÏ°í, ¿ø¼ÒµéÀ» Á¢±ÙÇÏ·Á¸é ¸ðµç °ªµéÀ» ¼±ÇüÀûÀ¸·Î ¼øȸÇØ¾ß ÇÑ´Ù. 6.1.1 Include È­ÀÏ list¸¦ »ç¿ëÇÒ ¶§´Â ¹Ýµå½Ã list Çì´õ È­ÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. #include 6.2 list ¿¬»ê ¸®½ºÆ® µ¥ÀÌÅÍ Å¸ÀÔÀÌ Á¦°øÇÏ´Â ¸â¹ö ÇÔ¼ö¿¡ °üÇØ ¾Æ·¡¿¡¼­ ÀÚ¼¼È÷ ´Ù·é´Ù. ¸â¹ö ÇÔ¼ö°¡ ±âÃÊÀûÀÎ ¿¬»êÀ» Á¦°øÇÏÁö¸¸, 13Àå°ú 14Àå¿¡¼­ ¼³¸íÇÒ generic ¾Ë°í¸®µëÀ» »ç¿ëÇÔÀ¸·Î½á µ¥ÀÌÅÍ ±¸Á¶¸¦ º¸´Ù À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. 6.2.1 listÀÇ ¼±¾ð°ú ÃʱâÈ­ [Image] ¸Þ¸ð¸® °ü¸® ¸®½ºÆ®¸¦ ¼±¾ðÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡Áö°¡ ÀÖ´Ù. °¡Àå °£´ÜÇÑ ÇüÅ´ ÄÝ·º¼ÇÀÌ °ü¸®ÇÒ ¿ø¼ÒÀÇ Å¸ÀÔÀ» ¸í½ÃÇÔÀ¸·Î½á ¸®½ºÆ®¸¦ ¼±¾ðÇÏ´Â ¹æ¹ýÀÌ´Ù. ¿ø¼ÒÀÇ Å¸ÀÔÀº integer³ª double°ú °°Àº primitive ŸÀÔÀ̳ª, Æ÷ÀÎÅÍ Å¸ÀÔÀÌ µÉ ¼öµµ ÀÖ°í, »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀÌ µÉ ¼öµµ ÀÖ´Ù. ÈÄÀÚÀÇ °æ¿ì, »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀº ¹Ýµå½Ã ±âº» »ý¼ºÀÚ¸¦ ¹Ýµå½Ã Á¤ÀÇÇØ¾ß ÇÑ´Ù. º¹»ç »ý¼ºÀÚµµ ¸í½ÃÀûÀ¸·Î³ª ¹¬½ÃÀûÀ¸·Î ¹Ýµå½Ã Á¸ÀçÇØ¾ß ÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î ¼±¾ðµÈ ÄÝ·º¼ÇÀº ¾Æ¹«·± ¿ø¼Òµµ °¡ÁöÁö ¾Ê°Ô µÈ´Ù. list list_one; list list_two; list list_three; ¶Ç ´Ù¸¥ ÇüÅ·δ ÀÏÁ¤¼öÀÇ µ¿ÀÏÇÑ ¿ø¼Ò¸¦ °¡Áö´Â ÄÝ·º¼ÇÀ» ¸¸µå´Â ¼±¾ðÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ¿ëµµ·Î »ç¿ëµÇ´Â »ý¼ºÀÚ´Â explicit·Î ¼±¾ðÇÏ¿©, º¯È¯ ¿¬»êÀÚ·Î »ç¿ëµÉ ¼ö ¾øµµ·Ï ÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, Á¤¼ö°¡ list·Î º¯È¯µÇÁö ¾Êµµ·Ï ÇÑ´Ù. ÀÌ·¯ÇÑ ÇüÅÂÀÇ »ý¼ºÀÚ´Â µÎ°³ÀÇ ÀÎÀÚ¸¦ ÃëÇϴµ¥, Çϳª´Â »çÀÌÁîÀÌ°í, Çϳª´Â ÃʱⰪÀÌ´Ù. µÎ¹ø° ÀÎÀÚ´Â »ý·«°¡´ÉÇÏ´Ù. »ý¼ºµÉ ¿ø¼ÒÀÇ °¹¼ö¸¸ÀÌ ÀÎÀÚ·Î ÁÖ¾îÁö¸é, ÀÌµé °ªµéÀº ±âº» »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ÃʱâÈ­µÇ°í, µÎ°³ ÀÎÀÚ°¡ ¸ðµÎ ÁÖ¾îÁö¸é, µÎ¹ø° ÀÎÀÚ·Î ÃʱâÈ­µÈ´Ù. list list_four(5); // five elements, initialized to zero list list_five(4, 3.14); // 4 values, initially 3.14 list wlist_six(4); // default constructor, 4 elements list list_six(3, Widget(7)); // 3 copies of Widget(7) ¸®½ºÆ®´Â ´Ù¸¥ ÄÝ·º¼Ç¿¡ ´ã±ä ¿ø¼Òµé·Î ÃʱâÈ­µÉ ¼ö Àִµ¥, À̶§´Â óÀ½°ú ³¡À» °¡¸®Å°´Â ÇѽÖÀÇ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ÀÎÀÚµéÀº ¾î¶² Á¾·ùÀÇ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ´õ¶óµµ »ó°ü¾øÀ¸¹Ç·Î, ¹Ýº¹ÀÚ¸¦ Áö¿øÇÏ´Â ÄÁÅ×À̳ÊÀ̱⸸ Çϸé, ÀÌ ÄÁÅ×À̳ʿ¡ ´ã±ä ¿ø¼Òµé·Î ¸®½ºÆ®¸¦ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é, ÅÛÇø´À» »ç¿ëÇÑ ¸â¹ö ÇÔ¼ö¸¦ specializeÇÒ ¼ö ÀÖ¾î¾ß Çϱ⠶§¹®¿¡, ¾î¶² ÄÄÆÄÀÏ·¯µéÀº À̸¦ Áö¿øÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡´Â, copy() generic ¾Ë°í¸®µëÀ» »ç¿ëÇÑ º°µµÀÇ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. copy()¸¦ »ç¿ëÇÏ¿© list¸¦ ÃʱâÈ­ÇÒ ¶§´Â »ðÀÔ ¹Ýº¹ÀÚ¸¦ ±¸¼ºÇÏ¿© copy ¿¬»êÀÌ ¼öÇàÇÏ´Â Ãâ·Â ¿¬»êÀ» ¸®½ºÆ®·ÎÀÇ »ðÀÔ ¿¬»êÀ¸·Î ¹Ù²ã¾ß ÇÑ´Ù. (2.4Àý Âü°í) »ðÀÔÀÚ´Â µÎ°³ÀÇ ÀÎÀÚ¸¦ ¿ä±¸Çϴµ¥, Çϳª´Â °ªÀÌ »ðÀ﵃ ¸®½ºÆ®ÀÌ°í, Çϳª´Â °ªÀÌ ³õ¿©Áö°Ô µÉ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚÀÌ´Ù. »ðÀÔ ¹Ýº¹ÀÚ´Â ÇöÁ¸ÇÏ´Â ¸®½ºÆ®ÀÇ ÀÓÀÇ À§Ä¡·Î ¿ø¼ÒµéÀ» º¹»çÇϴµ¥ »ç¿ëµÉ ¼öµµ ÀÖ´Ù. list list_seven(aVector.begin(), aVector.end()); // the following is equivalent to the above list list_eight; copy(aVector.begin(), aVector.end(), inserter(list_eight, list_eight.begin())); 6.2.3Àý¿¡¼­ ¼³¸íÇÏ´Â insert() ¿¬»êµµ ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â °ªµéÀ» ¸®½ºÆ®¿¡ ¹èÄ¡Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. »ðÀÔ ¹Ýº¹ÀÚ´Â generator(13.2.3Àý Âü°í)°¡ »ý¼ºÇÏ´Â °ªµéÀÇ ¼ö¿­·Î ¸®½ºÆ®¸¦ ÃʱâÈ­Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â À̸¦ ¼³¸íÇÏ°í ÀÖ´Ù. list list_nine; // initialize list 1 2 3 ... 7 generate_n(inserter(list_nine, list_nine.begin()), 7, iotaGen(1)); º¹»ç »ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ ¸®½ºÆ®°¡ °¡Áö°í ÀÖ´Â °ªµé·Î ¸®½ºÆ®¸¦ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù. ´ëÀÔ ¿¬»êÀÚµµ °°Àº ÀÛ¾÷À» ÇÑ´Ù. µÎ°¡Áö °æ¿ì ¸ðµÎ ¿ø¼Ò ŸÀÔ¿¡ ´ëÇÑ ´ëÀÔ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© °¢°¢ÀÇ »õ·Î¿î °ªµéÀ» º¹»çÇÑ´Ù. list list_ten(list_nine); // copy constructor list list_eleven; list_eleven = list_six; // values copied by assignment assign() ¸â¹ö ÇÔ¼ö´Â ´ëÀÔ ¿¬»êÀÚ¿Í À¯»çÇÏÁö¸¸, ´õ ±â´ÉÀÌ ¸¹°í, ¶§·Î´Â ´õ ¸¹Àº ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ´ëÀÔ°ú ¸¶Âù°¡Áö·Î, ÄÁÅ×À̳ʿ¡ µé¾îÀÖ´ø °ªµéÀº »èÁ¦µÇ¾î, ÀÎÀÚ·Î ¸í½ÃµÈ °ªÀ¸·Î ´ëüµÈ´Ù. assign()¿¡´Â µÎ°¡Áö ÇüÅ°¡ ÀÖ´Ù. ù°´Â ´Ù¸¥ ÄÁÅ×À̳ÊÀÇ ºÎ½ÃÄö½º¸¦ ¸í½ÃÇÏ´Â µÎ°³ÀÇ ¹Ýº¹ÀÚ¸¦ ÀÎÀÚ·Î ÃëÇÑ´Ù. ÀÌ ºÎ½ÃÄö½º¿¡ ´ã±ä °ªµéÀÌ ¼ö½ÅÀÚÀÇ »õ·Î¿î ¿ø¼Ò°¡ µÇ´Â °ÍÀÌ´Ù. assign()ÀÇ µÎ¹ø° ÇüÅ´ °¹¼ö¿Í ÄÁÅ×À̳ÊÀÇ ¿ø¼Ò ŸÀÔÀÎ °ªÀ» ÀÎÀÚ·Î ÃëÇÑ´Ù. µÎ¹ø° ÀÎÀÚ´Â »ý·«°¡´ÉÇÏ´Ù. ÀÌ°ÍÀ» È£ÃâÇÏ°í ³ª¸é, ÄÁÅ×À̳ʴ µðÆúÆ®°ª ¶Ç´Â ÀÎÀÚ·Î ¸í½ÃÇÑ ÃʱⰪÀ¸·Î ù¹ø° ÀÎÀÚ·Î ÁÖ¾îÁø °¹¼ö¸¸Å­ÀÇ ¿ø¼Ò¸¦ Æ÷ÇÔÇÏ°Ô µÈ´Ù. list_six.assign(list_ten.begin(), list_ten.end()); list_four.assign(3, 7); // three copies of value seven list_five.assign(12); // twelve copies of value zero ¸¶Áö¸·À¸·Î, swap()À̶õ ¿¬»êÀº µÎ ¸®½ºÆ®°£¿¡ ¼­·Î°¡ °¡Áö°í ÀÖ´Â ³»¿ëÀ» ¿ÏÀüÈ÷ ¹Ù²Ù´Â ÀÛ¾÷À» ÇÑ´Ù. ÀÎÀÚ·Î ¸í½ÃµÈ ÄÁÅ×À̳ʴ ¼ö½ÅÀÚÀÇ °ªµéÀ» °¡Áö°Ô µÇ°í, ¼ö½ÅÀÚ´Â ÀÎÀÚ·Î ¸í½ÃµÈ ÄÁÅ×À̳ÊÀÇ °ªµéÀ» °¡Áö°Ô µÈ´Ù. swap()Àº ¸Å¿ì È¿À²ÀûÀÎ ¿¬»êÀ̾, ¿ø¼Òº° Àü¼Û½Ã¿¡´Â ¿ì¼±ÀûÀ¸·Î »ç¿ëµÇ¾î¾ß ÇÑ´Ù. list_ten.swap(list_nine); // exchange lists nine and ten 6.2.2 ŸÀÔ Á¤ÀÇ list Ŭ·¡½º´Â ¸¹Àº ŸÀÔ Á¤ÀǵéÀ» °¡Áö°í ÀÖ´Ù. À̰͵éÀº ÁÖ·Î ¼±¾ð¹®¿¡¼­ ¸¹ÀÌ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î, Á¤¼ö list¸¦ À§ÇÑ ¹Ýº¹ÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. list::iterator location; iterator»Ó¸¸ ¾Æ´Ï¶ó ´ÙÀ½°ú °°Àº ŸÀÔµéÀÌ Á¤ÀǵǾî ÀÖ´Ù. value_type list¿¡ ´ã±ä ¿ø¼ÒÀÇ Å¸ÀÔ const_iterator ÇØ´ç ½ÃÄö½º¸¦ º¯°æÇÒ ¼ö ¾ø´Â ¹Ýº¹ÀÚ reverse_iterator µÞ¹æÇâÀ¸·Î À̵¿ÇÏ´Â ¹Ýº¹ÀÚ const_reverse_iterator »ó¼ö ¹Ýº¹ÀÚ¿Í ¿ª ¹Ýº¹ÀÚ¸¦ ÇÕÃÄ ³õÀº ¹Ýº¹ÀÚ reference ¿ø¼Ò¿¡ ´ëÇÑ ·¹ÆÛ·±½º const_reference ¿ø¼Ò¸¦ º¯°æÇÒ ¼ö ¾ø´Â ·¹ÆÛ·±½º size_type ÄÁÅ×À̳ÊÀÇ »çÀÌÁî¿¡ »ç¿ëµÇ´Â ºñºÎÈ£Çü Á¤¼ö ŸÀÔ difference_type ¹Ýº¹ÀÚ°£ÀÇ °Å¸®¿¡ »ç¿ëµÇ´Â ºÎÈ£Çü Á¤¼ö ŸÀÔ allocator_type list°¡ ¸Þ¸ð¸® °ü¸®¿¡ »ç¿ëÇÏ´Â ÇÒ´ç±â ŸÀÔ 6.2.3 list¿¡ ¿ø¼Ò Áý¾î³Ö±â list¿¡ °ªµéÀ» Áý¾î³ÖÀº ¹æ¹ý¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ´Ù. ¿ø¼ÒµéÀº °ÅÀÇ ´ëºÎºÐ ¸®½ºÆ®ÀÇ ¾ÕÂÊÀ̳ª µÚÂÊ¿¡¼­ Ãß°¡µÈ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷µéÀº °¢°¢ push_front()¿Í push_back() ¿¬»ê¿¡ ÀÇÇØ ¼öÇàµÈ´Ù. ÀÌµé ¿¬»êµéÀº µÎ°¡Áö ŸÀÔÀÇ ÄÁÅ×ÀÌ³Ê ¸ðµÎ¿¡ ´ëÇؼ­ È¿À²Àû(»ó¼ö½Ã°£)ÀÌ´Ù. list_seven.push_front(1.2); list_eleven.push_back(Widget(6)); ¾Õ¼­ 6.2.1Àý¿¡¼­, »ðÀÔ ¹Ýº¹ÀÚ¿Í ÇÔ²² copy()³ª generate() generic ¾Ë°í¸®µëÀ» »ç¿ëÇÏ¿©, ¹Ýº¹ÀÚ°¡ ÁöĪÇÏ´Â ¸®½ºÆ®»óÀÇ À§Ä¡¿¡ °ªÀ» »ðÀÔÇÏ´Â ¹ý¿¡ °üÇØ ¼³¸íÇß´Ù. insert()¶õ ¸â¹ö ÇÔ¼öµµ Àִµ¥, ÀÌ´Â »ðÀÔÀÚ¸¦ ±¸ÃàÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¾ÕÀ¸·Î °£´ÜÈ÷ ¼³¸íÇÏ°ÚÁö¸¸, begin()°ú end() ÇÔ¼ö°¡ ¸¸µé¾î³»´Â ¹Ýº¹ÀÚ°¡ °¡Áö´Â °ªµéÀº °¢°¢ ¸®½ºÆ®ÀÇ ½ÃÀÛ°ú ³¡À» °¡¸®Å²´Ù. À̵é Áß Çϳª¸¦ »ç¿ëÇÑ »ðÀÔÀº °¢°¢ push_front()¿Í push_back()¿¡ ÇØ´çÇÑ´Ù. ¸¸¾à¿¡ ´Ü ÇÑ°³ÀÇ ¹Ýº¹ÀÚ¸¸À» ÁöÁ¤Çϸé, µðÆúÆ® ¿ø¼Ò°¡ »ðÀԵȴÙ. // insert default type at beginning of list list_eleven.insert(list_eleven.begin()); // insert widget 8 at end of list list_eleven.insert(list_eleven.end(), Widget(8)); [Image] ¹Ýº¹ÀÚÀÇ ¹«È¿È­ ¹Ýº¹ÀÚ´Â ¸®½ºÆ®ÀÇ Áß°£ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ¹Ýº¹ÀÚ¸¦ ¸¸µé¾î³»´Â ¹æ¹ý¿¡µµ ¿©·¯°¡Áö°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, find() generic ¾Ë°í¸®µë°ú °°Àº 13.3Àý¿¡ ¼³¸íµÇ¾î ÀÖ´Â °Ë»ö ¿¬»êÀ» »ç¿ëÇÑ °á°ú¸¦ ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ´Ù. »õ·Î¿î °ªÀº ¹Ýº¹ÀÚ°¡ ÁöÁ¤ÇÑ À§Ä¡ ¹Ù·Î ¾Õ¿¡ »ðÀԵȴÙ. insert() ¿¬»êÀº °ªÀÌ »ðÀÔµÈ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ¸¦ ¹ÝȯÇÑ´Ù. À§¿¡¼­´Â ÀÌ °á°ú°ªÀÌ ¹«½ÃµÇ¾ú´Ù. // find the location of the first occurrence of the // value 5 in list list::iterator location = find(list_nine.begin(), list_nine.end(), 5); // and insert an 11 immediate before it location = list_nine.insert(location, 11); ÀÎÀÚ·Î ¹ÞÀº °ªÀ» Á¤ÇØÁø °¹¼ö¸¸Å­ »ðÀÔÇÏ´Â °Í ¶ÇÇÑ °¡´ÉÇÏ´Ù. ÀÌ·¯ÇÑ ÇüÅÂÀÇ insert()´Â °ªµéÀÇ À§Ä¡¸¦ °á°ú·Î ³»³õÁö´Â ¾Ê´Â´Ù. line_nine.insert(location, 5, 12); // insert five twelves ¸¶Áö¸·À¸·Î, ÇѽÖÀÇ ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â ½ÃÄö½º ÀüºÎ¸¦ ¸®½ºÆ®¿¡ »ðÀÔÇÒ ¼öµµ ÀÖ´Ù. ÀÌ°æ¿ì¿¡µµ, insert()ÀÇ ¹Ýȯ°ªÀÌ ¾ø´Ù. // insert entire contents of list_ten into list_nine list_nine.insert(location, list_ten.begin(), list_ten.end()); ÇϳªÀÇ ¸®½ºÆ®¸¦ ´Ù¸¥ ¸®½ºÆ®¿¡ Á¢¸ñÇÏ´Â ¹æ¹ý¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ´Ù. Á¢¸ñÀº ¾ÆÀÌÅÛÀÌ ¼ö½ÅÀÚ list¿¡ ÷°¡µÊ°ú µ¿½Ã¿¡ ÀÎÀÚ·Î ³Ñ¾î¿Â list·ÎºÎÅÍ »èÁ¦°¡ ÀϾ´Ù´Â Á¡¿¡¼­ »ðÀÔ°ú ´Ù¸£´Ù. ÀÌ·¸±â ¶§¹®¿¡, Á¢¸ñÀº ¸Å¿ì È¿À²ÀûÀÌ°í, ÀûÀýÇÑ ¶§¿¡ ¹Ýµå½Ã »ç¿ëµÇ¾î¾ß ÇÑ´Ù. »ðÀÔ¿¡¼­Ã³·³, splice() ¸â¹ö ÇÔ¼ö´Â ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ¿©, Á¢¸ñÀÌ ÀϾ´Â ¼ö½ÅÀÚ ¸®½ºÆ®¿¡¼­ÀÇ À§Ä¡¸¦ °¡¸®Å²´Ù. ÀÎÀÚ´Â ¸®½ºÆ® Àüü ¶Ç´Â ¸®½ºÆ®³»ÀÇ ÇÑ ¿ø¼Ò(¹Ýº¹ÀÚ·Î ÁöĪ) ¶Ç´Â ¸®½ºÆ®ÀÇ ºÎ½ÃÄö½º(ÇѽÖÀÇ ¹Ýº¹ÀÚ·Î ÁöĪ)°¡ µÉ ¼ö ÀÖ´Ù. // splice the last element of list ten list_nine.splice(location, list_ten, list_ten.end()); // splice all of list ten list_nine.splice(location, list_ten); // splice list 9 back into list 10 list_ten.splice(list_ten.begin(), list_nine, list_nine.begin(), location); µÎ°³ÀÇ ¼ø¼­È­µÈ ¸®½ºÆ®´Â merge() ¿¬»êÀ» ÅëÇØ ÇÕÃÄÁú ¼ö ÀÖ´Ù. ÀÎÀÚ·Î ³Ñ°ÜÁø ¸®½ºÆ®ÀÇ °ªµéÀº ¼ø¼­È­µÈ ¸®½ºÆ®·Î ÇÕÃÄÁö°í ³ª¸é, ÀÎÀÚ·Î ³Ñ°ÜÁø ¸®½ºÆ®´Â ºñ¿öÁö°Ô µÈ´Ù. ÀÌ ¶§ÀÇ merge´Â 'stable'ÇÏ´Ù. ´Ù½Ã ¸»Çؼ­, ¿ø¼ÒµéÀº ¿ø·¡ ¼ÓÇØ ÀÖ´ø ¸®½ºÆ®¿¡¼­ÀÇ »ó´ëÀûÀÎ ¼ø¼­¸¦ ±×´ë·Î À¯ÁöÇÑ´Ù. 14.6Àý¿¡¼­ »ìÆ캼 °°Àº À̸§À» °¡Áø generic ¾Ë°í¸®µë¿¡¼­Ã³·³ merge() ¸â¹ö ÇÔ¼ö´Â µÎ°¡Áö ÇüÅ°¡ Áö¿øµÈ´Ù. µÎ¹ø° ÇüÅ´ °ªµéÀ» ¼ø¼­Áþ±â À§Çؼ­ ÀÎÀÚ·Î Á¦°øµÇ´Â ÀÌÇ× ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ¸ðµç ÄÄÆÄÀÏ·¯°¡ µÎ¹ø° ÇüŸ¦ Áö¿øÇÏÁö´Â ¾Ê´Â´Ù. ¸¸¾à ÀÌ µÎ¹ø° ÇüÅ°¡ ÇÊ¿äÇÏÁö¸¸ Áö¿øµÇÁö ¾Ê´Â´Ù¸é, Á» ºñÈ¿À²ÀûÀ̱ä ÇÏÁö¸¸, ´õ ÀϹÝÀûÀÎ generic ¾Ë°í¸®µëÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ú´Ù. // merge with explicit compare function list_eleven.merge(list_six, widgetCompare); //the following is similar to the above list list_twelve; merge(list_eleven.begin(), list_eleven.end(), list_six.begin(), list_six.end(), inserter(list_twelve, list_twelve.begin()), widgetCompare); list_eleven.swap(list_twelve); 6.2.4 ¿ø¼Ò »èÁ¦Çϱ⠸®½ºÆ®¿¡ ¿ø¼Ò¸¦ Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ ¿©·µ ÀÖµíÀÌ, ¸®½ºÆ®·ÎºÎÅÍ ¿ø¼Ò¸¦ »èÁ¦ÇÏ´Â ¹æ¹ý¿¡µµ ¿©·¯°¡Áö°¡ ÀÖ´Ù. ¿ø¼Ò¸¦ »èÁ¦Çϴµ¥ °¡Àå ¸¹ÀÌ ¾²ÀÌ´Â ¿¬»êÀº pop_front()¿Í pop_back()À¸·Î, °¢°¢ ¸®½ºÆ®ÀÇ ½ÃÀÛ°ú ³¡¿¡¼­ ÇϳªÀÇ ¿ø¼Ò¸¦ »èÁ¦ÇÑ´Ù. ÀÌµé ¸â¹ö ÇÔ¼ö´Â ´Ü¼øÈ÷ ÁÖ¾îÁø ¿ø¼Ò¸¦ »èÁ¦Çϱ⸸ ÇÏ°í, º°´Ù¸¥ °á°ú°ªÀº ¹ÝȯÇÏÁö ¾Ê´Â´Ù. ¿ø¼Òµé¿¡ ´ëÇØ ¼Ò¸êÀÚ°¡ Á¤ÀǵǾî ÀÖ´Ù¸é, ÀÌµé ¿ø¼Ò°¡ »èÁ¦µÉ ¶§ ¼Ò¸êÀÚ°¡ È£ÃâµÈ´Ù. »èÁ¦Çϱâ Àü¿¡ °ªµéÀ» »ìÆ캸±â À§Çؼ­´Â front()³ª back() ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. erase() ¿¬»êÀº ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â °ªÀ» »èÁ¦Çϴµ¥ »ç¿ëµÈ´Ù. ¸®½ºÆ®ÀÇ °æ¿ì, ÀÎÀÚ·Î ÁÖ¾îÁø ¹Ýº¹ÀÚ¿Í µ¿ÀÏÇÑ ÁöÁ¡À» °¡¸®Å°°í ÀÖ´Â ´Ù¸¥ ¹Ýº¹ÀÚµéÀº »èÁ¦°¡ ÀϾ µÚ¿¡´Â ¹«È¿°¡ µÈ´Ù. ÇÏÁö¸¸, ´Ù¸¥ ÁöÁ¡À» °¡¸®Å°´Â ¹Ýº¹ÀÚµéÀº ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. ÇѽÖÀÇ ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â ºÎ½ÃÄö½º Àüü¸¦ »èÁ¦ÇÒ ¶§µµ erase()¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ù¹ø° ¹Ýº¹ÀÚ¿¡¼­ºÎÅÍ ¸¶Áö¸· ¹Ýº¹ÀÚ ¹Ù·Î ÀÌÀü±îÁöÀÇ °ªµéÀÌ ¸®½ºÆ®·ÎºÎÅÍ »èÁ¦µÈ´Ù. ¸®½ºÆ® Áß°£¿¡¼­ ¿ø¼Ò¸¦ »èÁ¦ÇÏ´Â °ÍÀº vector³ª deque¿¡¼­¿Í´Â ´Þ¸® È¿À²ÀûÀÎ ¿¬»êÀÌ´Ù. list_nine.erase(location); // erase values between the first occurrence of 5 // and the following occurrence of 7 list::iterator location = find(list_nine.begin(), list_nine.end(), 5); list::iterator location2 = find(location, list_nine.end(), 7); list_nine.erase(location, location2); remove() ¸â¹ö ÇÔ¼ö´Â ¸®½ºÆ®·ÎºÎÅÍ ÁÖ¾îÁø °ª°ú °°Àº ¸ðµç ¿ø¼ÒµéÀ» »èÁ¦ÇÑ´Ù. remove_if()´Â ÁÖ¾îÁø Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¸ðµç °ªµéÀ» »èÁ¦ÇÑ´Ù. ÀÌµé ´ë½Å¿¡, 13.5.1Àý¿¡¼­ ¼³¸íÇÒ remove()³ª remove_if() generic ¾Ë°í¸®µëÀ» »ç¿ëÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. À̵é generic ¾Ë°í¸®µëµéÀº ¸®½ºÆ®ÀÇ »çÀÌÁ °¨¼Ò½ÃÅ°Áö ¾ÊÀ¸¸ç, ´ë½Å¿¡ ¿ø¼ÒµéÀ» ¸®½ºÆ®ÀÇ ¾ÕÂÊ¿¡ °¡Á®´Ù ³õ°í, ¸®½ºÆ®ÀÇ ³ª¸ÓÁö ºÎºÐÀº ³»¹ö·ÁµÎ°í, º¯°æµÇÁö ¾ÊÀº ù¹ø° ¿ø¼ÒÀÇ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ¸¦ ¹ÝȯÇÑ´Ù. ÀÌ ¹Ýȯ°ªÀº erase()¿Í ÇÔ²² »ç¿ëµÇ¾î ³ª¸ÓÁö °ªµéÀ» »èÁ¦Çϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. list_nine.remove(4); // remove all fours list_nine.remove_if(divisibleByThree); //remove any div by 3 // the following is equivalent to the above list::iterator location3 = remove_if(list_nine.begin(), list_nine.end(), divisibleByThree); list_nine.erase(location3, list_nine.end()); unique() ¿¬»êÀº ¸®½ºÆ®¿¡¼­ ¿¬¼ÓÀûÀ¸·Î °°Àº °ªÀÌ ³ª¿À¸é ù¹ø° ¿ø¼Ò¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö¸¦ ¸ðµÎ »èÁ¦ÇÑ´Ù. ¸®½ºÆ®°¡ Á¤·ÄµÇ¾î ÀÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ¶Ç ´Ù¸¥ ÇüÅÂÀÇ unique()´Â ÀÎÀÚ·Î ÀÌÇ× ÇÔ¼ö¸¦ ÃëÇϴµ¥, ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ÀÌ¿ôÇÏ´Â ¿ø¼ÒµéÀ» ºñ±³ÇÏ¿© ÇÔ¼ö°¡ ÂüÀ» ¸®ÅÏ°ªÀ¸·Î ¹ÝȯÇÏ¸é µÎ¹ø° °ªÀ» »èÁ¦ÇÑ´Ù. remove_if()¿¡¼­ ó·³, ¸ðµç ÄÄÆÄÀÏ·¯°¡ ÀÌ µÎ¹ø° ÇüÅÂÀÇ unique()¸¦ Áö¿øÇÏÁö´Â ¾Ê´Â´Ù. ÀÌ·²¶§´Â Á»´õ ÀϹÝÀûÀÎ unique() generic ¾Ë°í¸®µëÀ» »ç¿ëÇÏ¸é µÈ´Ù(13.5.2Àý Âü°í). ´ÙÀ½ ¿¹´Â ÀÌÇ× ÇÔ¼ö°¡ greater-than ¿¬»êÀÎ °æ¿ì·Î, ¾ÕÂÊÀÇ ¿ø¼Òº¸´Ù ÀÛÀº °ªµéÀº ¸ðµÎ »èÁ¦ÇÑ´Ù. // remove first from consecutive equal elements list_nine.unique(); // explicitly give comparison function list_nine.unique(greater()); // the following is equivalent to the above location3 = unique(list_nine.begin(), list_nine.end(), greater()); list_nine.erase(location3, list_nine.end()); 6.2.5 È®Àå ¹× »çÀÌÁî º¯È¯ ¿¬»ê size() ¸â¹ö ÇÔ¼ö´Â ÄÁÅ×À̳ʰ¡ ´ã°í ÀÖ´Â ¿ø¼ÒµéÀÇ °¹¼ö¸¦ ¸®ÅÏÇÑ´Ù. empty() ÇÔ¼ö´Â ÄÁÅ×À̳ʰ¡ ºñ¾îÀÖÀ» ¶§ ÂüÀ» ¸®ÅÏÇÏ°í, size()¸¦ 0°ú ºñ±³ÇÏ´Â °Íº¸´Ù ´õ È¿À²ÀûÀÌ´Ù. cout << "Number of elements: " << list_nine.size () << endl; if ( list_nine.empty () ) cout << "list is empty " << endl; else cout << "list is not empty " << endl; resize() ¸â¹ö ÇÔ¼ö´Â ¸®½ºÆ®ÀÇ »çÀÌÁ ÀÎÀÚ·Î ³Ñ°ÜÁØ °ªÀ¸·Î ¹Ù²Û´Ù. ÀÌ ¶§, ÇÊ¿äÇÏ´Ù¸é collectionÀÇ ³¡ºÎºÐ¿¡¼­ °ªµéÀ» Ãß°¡·Î ´õÇϰųª »èÁ¦ÇÑ´Ù. »ý·« °¡´ÉÇÑ µÎ¹ø° ÀÎÀÚ´Â »õ·Î ¿ø¼Ò°¡ Ãß°¡µÉ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì¿¡ ÃʱⰪÀ¸·Î »ç¿ëµÈ´Ù. // become size 12, adding values of 17 if necessary list_nine.resize (12, 17); 6.2.6 Á¢±Ù°ú ¹Ýº¹ÀÚ front()¿Í back() ¸â¹ö ÇÔ¼ö´Â °¢°¢ ÄÁÅ×À̳ÊÀÇ Ã³À½ ¿ø¼Ò¿Í ¸¶Áö¸· ¿ø¼Ò¸¦ ¹ÝȯÇÑ´Ù. À̶§ »èÁ¦´Â ÇÏÁö ¾Ê´Â´Ù. ¸®½ºÆ®¿¡ ´ëÇؼ­, ´Ù¸¥ ¿ø¼Ò¸¦ Á¢±ÙÇÏ·Á¸é, ¿øÇÏ´Â ¿ø¼Ò°¡ ¸Ç ¾ÕÀ̳ª ³¡¿¡ ¿À°Ô µÉ ¶§±îÁö ¿ø¼ÒµéÀ» Áö¿ì°Å³ª, ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇÔÀ¸·Î½á °¡´ÉÇÏ´Ù. ¸®½ºÆ®¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Â ¹Ýº¹ÀÚ¿¡´Â ¼¼°¡Áö ÇüÅ°¡ ÀÖ´Ù. begin()°ú end() ÇÔ¼ö´Â ¼ø¹æÇâÀ¸·Î À̵¿ÇÒ ¼ö ÀÖ´Â ¹Ýº¹ÀÚ¸¦ ¸¸µé¾î ³»´Âµ¥, ¸®½ºÆ®ÀÇ °æ¿ì¿¡ begin()°ú end()´Â ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ ¸¸µé¾î ³½´Ù. rbegin()°ú rend()´Â ¿ª¼øÀ¸·Î À̵¿ÇÒ ¼ö ÀÖ´Â ¹Ýº¹ÀÚ¸¦ ¸¸µé¾î³»´Âµ¥, ¸®½ºÆ®ÀÇ ³¡¿¡¼­ºÎÅÍ ¾ÕÂÊÀ¸·Î À̵¿ÇÑ´Ù. 6.2.7 ¼Ò¼Ó °Ë»ç ¿¬»ê ¸®½ºÆ® µ¥ÀÌÅÍ Å¸ÀÔÀº ƯÁ¤ °ªÀÌ Àڽſ¡°Ô ¼ÓÇØÀÖ´ÂÁö¸¦ ÆǺ°Çϴµ¥ »ç¿ëµÇ´Â ¸Þ½îµå¸¦ Á÷Á¢ Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª, find()³ª count() generic ¾Ë°í¸®µë(13.3.1Àý°ú 13.6.1Àý Âü°í)¸¦ ÀÌ·± ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº 17À̶õ ¼ö°¡ Á¤¼ö ¸®½ºÆ®¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â ¿¹ÀÌ´Ù. int num = 0; count(list_five.begin(), list_five.end(), 17, num); if (num > 0) cout << "contains a 17" << endl; else cout << "does not contain a 17" << endl; if (find(list_five.begin(), list_five.end(), 17) != list_five.end()) cout << "contains a 17" << endl; else cout << "does not contain a 17" << endl; 6.2.8 Á¤·Ä ¿¬»ê sort() ¸â¹ö ÇÔ¼ö´Â ¿ø¼ÒµéÀ» ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄÇÑ´Ù. '<' ¿¬»êÀÚ ÀÌ¿ÜÀÇ ºñ±³ ¿¬»êÀÚ¸¦ ¿øÇÑ´Ù¸é, ÀÎÀÚ·Î Á¦°øÇÏ¸é µÈ´Ù. list_ten.sort( ); // place elements into sequence list_twelve.sort(widgetCompare); // sort with widget compare // function ÀÏ´Ü ¸®½ºÆ®°¡ Á¤·ÄµÇ°í ³ª¸é, Á¤·Ä ÄÝ·º¼Ç¿ë generic ¾Ë°í¸®µëÀ» ¸®½ºÆ®¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌµé ¾Ë°í¸®µë¿¡ °üÇؼ­´Â 14Àå¿¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù. 6.2.9 °Ë»ö ¿¬»ê 13.3Àý¿¡¼­ ¼³¸íÇÒ find(), find_if(), adjacent_find(), mismatch(), max_element(), min_element(), search() µîÀÇ ´Ù¾çÇÑ ÇüÅÂÀÇ °Ë»ö ÇÔ¼öµéÀ» ¸®½ºÆ®¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸ðµç °æ¿ì¿¡ À̵éÀº ¹Ýº¹ÀÚ¸¦ °á°ú°ªÀ¸·Î ¸®ÅÏÇϸç, ÀÌ ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇÏ¿© ¿ø¼Ò¸¦ ÂüÁ¶Çϰųª, µÚ¿¡ À̾îÁö´Â ¿¬»ê¿¡¼­ ÀÎÀÚ·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. [Image] °Ë»ö °á°úÀÇ °Ë»ç 6.2.10 In Place º¯È¯ ¾î¶² °ÍµéÀº ¸â¹ö ÇÔ¼ö·Î Á¦°øµÇ°í, ¾î¶² °ÍµéÀº 13Àå¿¡¼­ ¼³¸íÇÒ generic ÇÔ¼öµéÀ» ÀÌ¿ëÇϱ⵵ ÇÑ´Ù. ¸®½ºÆ®ÀÇ °æ¿ì¿¡´Â, reverse() ¸â¹ö ÇÔ¼ö°¡ ¿ø¼ÒµéÀ» ¼ø¼­¸¦ µÚÁý´Â´Ù. list_ten.reverse(); // elements are now reversed transform() generic ¾Ë°í¸®µë(13.7.1Àý)À» »ç¿ëÇÏ¿©, ÀÔ·Â ÄÁÅ×ÀÌ³Ê¿Í °á°ú ÄÁÅ×À̳ʸ¦ °°Àº °ÍÀ¸·Î ÁöÁ¤Çϸé, ÄÁÅ×À̳ʳ»ÀÇ ¸ðµç °ªµéÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº ¸®½ºÆ®ÀÇ °¢ ¿ø¼Ò¸¦ 1¾¿ Áõ°¡½ÃÅ°´Â ¿¹ÀÌ´Ù. ÀÚ½ÅÀÌ ÇÊ¿ä·ÎÇÏ´Â ´ÜÇ× ÇÔ¼ö¸¦ ¸¸µé±â À§Çؼ­, ÀÌÇ× Á¤¼öµ¡¼À ÇÔ¼ö°¡ 1À̶ó´Â °ª¿¡ ¿¬°áµÇ¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. µÎ°³ÀÇ ½ÃÄö½º¸¦ º´·ÄÀûÀ¸·Î ´Ù·ç´Â transform()Àº ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù. transform(list_ten.begin(), list_ten.end(), list_ten.begin(), bind1st(plus(), 1)); ÀÌ¿Í ºñ½ÁÇÏ°Ô, replace()¿Í replace_if() ÇÔ¼ö(13.4.2Àý Âü°í)´Â ¸®½ºÆ®ÀÇ ¿ø¼ÒµéÀ» ƯÁ¤ °ªÀ¸·Î ġȯÇϴµ¥ »ç¿ëµÈ´Ù. ¼øȯ(13.4.3Àý)°ú ºÐÇÒ(13.4.4Àý)µµ ¸®½ºÆ®¿¡ Àû¿ëµÉ ¼ö ÀÖ´Ù. // find the location of the value 5, and rotate around it location = find(list_ten.begin(), list_ten.end(), 5); rotate(list_ten.begin(), location, list_ten.end()); // now partition using values greater than 7 partition(list_ten.begin(), list_ten.end(), bind2nd(greater(), 7)); next_permutation()°ú prev_permutation() ÇÔ¼ö(13.4.5Àý)´Â °¢°¢ ´ÙÀ½¹ø ¼ø¿­°ú ÀÌÀü ¼ø¿­À» »ý¼ºÇϴµ¥ »ç¿ëµÈ´Ù. next_permutation (list_ten.begin(), list_ten.end()); 6.2.11 ±âŸ ¿¬»ê for_each() ¾Ë°í¸®µë(13.8.1Àý)Àº ÄÝ·º¼Ç ³»ÀÇ ¸ðµç ¿ø¼Ò¿¡ ÇÔ¼ö¸¦ Àû¿ëÇÑ´Ù. ÀÌ°ÍÀÌ »ç¿ëµÇ´Â ¿¹´Â deque µ¥ÀÌÅÍ ±¸Á¶¿¡ °üÇÑ ÀýÀÇ radix sort ¿¹Á¦ ÇÁ·Î±×·¥¿¡ Àß ³ªÅ¸³ª ÀÖ´Ù. accumulate() generic ¾Ë°í¸®µëÀº ÄÝ·º¼ÇÀ¸·ÎºÎÅÍ ÇϳªÀÇ °ªÀ» ¸¸µé¾î ³½´Ù(13.6.2Àý Âü°í). ¿¹¸¦ µé¸é, Á¤¼ö ¸®½ºÆ®¿¡ ¼ÓÇÑ ¸ðµç ¿ø¼ÒµéÀÇ ÇÕÀ» ±¸Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. accumulate()¸¦ Á» »ö´Ù¸£°Ô »ç¿ëÇÑ ¿¹µµ ¸¶Âù°¡Áö·Î radix sort ¿¹¿¡¼­ »ìÆ캼 ¼ö ÀÖ´Ù. cout << "Sum of list is: " << accumulate(list_ten.begin(), list_ten.end(), 0) << endl; µÎ°³ÀÇ ¸®½ºÆ®¸¦ ¼­·Î ºñ±³ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. »çÀÌÁî°¡ °°°í ´ëÀÀµÇ´Â ¿ø¼Ò°¡ ¼­·Î °°´Ù¸é µÎ ¸®½ºÆ®´Â °°´Ù°í º»´Ù. »çÀüÀûÀ¸·Î ÇÑÂÊÀÌ ÀÛÀº°æ¿ì¿¡ ±× ¸®½ºÆ®´Â ³ª¸ÓÁö ¸®½ºÆ®º¸´Ù ÀÛ´Ù°í ÇÑ´Ù(13.6.5Àý). 6.3 ¿¹Á¦ ÇÁ·Î±×·¥ - An Inventory System We will use a simple inventory management system to illustrate the use of several list operations. Assume a business, named WorldWideWidgetWorks, requires a software system to manage their supply of widgets. Widgets are simple devices, distinguished by different identification numbers: class Widget { public: Widget(int a = 0) : id(a) { } void operator = (const Widget& rhs) { id = rhs.id; } int id; friend ostream & operator << (ostream & out,const Widget & w) { return out << "Widget " << w.id; } friend bool operator == (const Widget& lhs, const Widget& rhs) { return lhs.id == rhs.id; } friend bool operator< (const Widget& lhs, const Widget& rhs) { return lhs.id < rhs.id; } }; The state of the inventory is represented by two lists. One list represents the stock of widgets on hand, while the second represents the type of widgets that customers have backordered. The first is a list of widgets, while the second is a list of widget identification types. To handle our inventory we have two commands; the first, order(), processes orders, while the second, receive(), processes the shipment of a new widget. class inventory { public: void order (int wid); // process order for widget type wid void receive (int wid); // receive widget of type wid in shipment private: list on_hand; list on_order; }; When a new widget arrives in shipment, we compare the widget identification number with the list of widget types on backorder. We use find() to search the backorder list, immediately shipping the widget if necessary. Otherwise it is added to the stock on hand. void inventory::receive (int wid) { cout << "Received shipment of widget type " << wid << endl; list::iterator weneed = find (on_order.begin(), on_order.end(), wid); if (weneed != on_order.end()) { cout << "Ship " << Widget(wid) << " to fill back order" << endl; on_order.erase(weneed); } else on_hand.push_front(Widget(wid)); } When a customer orders a new widget, we scan the list of widgets in stock to determine if the order can be processed immediately. We can use the function find_if() to search the list. To do so we need a binary function that takes as its argument a widget and determines whether the widget matches the type requested. We can do this by taking a general binary widget-testing function, and binding the second argument to the specific widget type. To use the function bind2nd(), however, requires that the binary function be an instance of the class binary_function. The general widget-testing function is written as follows: class WidgetTester : public binary_function { public: bool operator () (const Widget & wid, int testid) const { return wid.id == testid; } }; The widget order function is then written as follows: void inventory::order (int wid) { cout << "Received order for widget type " << wid << endl; list::iterator wehave = find_if (on_hand.begin(), on_hand.end(), bind2nd(WidgetTester(), wid)); if (wehave != on_hand.end()) { cout << "Ship " << *wehave << endl; on_hand.erase(wehave); } else { cout << "Back order widget of type " << wid << endl; on_order.push_front(wid); } }