39-1-³ª.¹Ýº¹ÀÚ ±¸°£

¸ðµç ¾Ë°í¸®Áò ÇÔ¼öµéÀº ÀÛ¾÷ ´ë»óÀ» Àü´Þ¹Þ±â À§ÇØ ¹Ýº¹ÀÚ¸¦ Àμö·Î ¹Þ¾ÆµéÀδÙ. ƯÁ¤ÇÑ ´ÜÀÏ ¿ä¼Ò¿¡ ´ëÇØ Àû¿ëµÇ´Â ¾Ë°í¸®ÁòÀº ´ë»ó ¿ä¼Ò Çϳª¸¸À» ¹Þ¾ÆµéÀÌÁö¸¸ ´ë°³ÀÇ °æ¿ì´Â µÎ °³ÀÇ ¹Ýº¹ÀڷΠǥÇöµÇ´Â ¹Ýº¹ÀÚ ±¸°£(iterator range)À» ¹Þ¾Æµé¿© ±¸°£³»ÀÇ ¸ðµç ¿ä¼Ò¿¡ ´ëÇØ Àû¿ëµÈ´Ù. °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â find, sortÇÔ¼öÀÇ ¿øÇüÀ» º¸ÀÚ.

 

InIt find(InIt first, InIt last, const T& val);

void sort(RanIt first, RanIt last);

 

µÑ ´Ù first, last µÎ °³¾¿ÀÇ ¹Ýº¹ÀÚ¸¦ ¹ÞÀ¸¹Ç·Î ¹Ýº¹ÀÚ ±¸°£¿¡ ´ëÇØ µ¿ÀÛÇÑ´Ù. ÀÓÀÇÀÇ °ªÀ» ã±â À§Çؼ­´Â °Ë»ö ¹üÀ§°¡ ÁöÁ¤µÇ¾î¾ß Çϸç Á¤·ÄÀ̶ó´Â °Íµµ º¹¼ö °³ÀÇ ¿ä¼ÒµéÀ» ±âÁØ¿¡ µû¶ó Àç¹èÄ¡ÇÏ´Â °ÍÀ̹ǷΠ±¸°£ÀÌ Àü´ÞµÇ´Â °ÍÀÌ ÇÕ´çÇÏ´Ù. Åë»ó ±¸°£ÀÇ ½ÃÀÛÁ¡Àº first¶ó´Â À̸§À» ¾²°í ³¡Àº last¶ó´Â À̸§À» ¾²´Âµ¥ first¿Í last°¡ ÁöÁ¤ÇÏ´Â ¹Ýº¹ÀÚ ±¸°£¿¡ first´Â Æ÷ÇÔµÇÁö¸¸ last´Â Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ first, last ±¸°£ÀÇ Á¤È®ÇÑ Àǹ̴ ´ÙÀ½ ±×¸²°ú °°´Ù.

ÀÌ ±¸°£À» ¼öÇÐÀûÀ¸·Î Ç¥ÇöÇϸé first <= range < last¿Í °°ÀÌ Ç¥±âÇÒ ¼ö ÀÖÀ¸¸ç STL¿¡¼­´Â ´ÝÈù °ýÈ£¿Í ¿­¸° °ýÈ£¸¦ »ç¿ëÇÏ¿© [first, last)·Î Ç¥±âÇϱ⵵ Çϴµ¥ ÀÌ Ã¥Àº °£´ÜÇÏ°Ô first ~ last·Î Ç¥±âÇϱâ·Î ÇÑ´Ù. ÀÏ»ó »ýÈ°¿¡¼­´Â a ~ b¹üÀ§¸¦ ĪÇϸé Åë»ó aÀÌ»ó bÀÌÇϸ¦ ÀǹÌÇϸç bµµ Æ÷ÇԵȴÙ. ´ãÀÓ ¼±»ý´ÔÀÌ ¿À´ÃÀº 5¹øºÎÅÍ 10¹ø±îÁö È­Àå½Ç û¼Ò¸¦ Ç϶ó¸é 10¹ø Çлýµµ ´ç¹ø¿¡ Æ÷ÇԵǴ °ÍÀÌ »ó½ÄÀûÀÌ´Ù. ±×·¯³ª STLÀÇ ¼¼°è¿¡¼­´Â ¹üÀ§ÀÇ ³¡Àº Á¦¿ÜÇÏ´Â °ÍÀÌ »ó½ÄÀÌ´Ù.

ÀÌ´Â ºñ´Ü STL¿¡¼­¸¸ ±×·± °ÍÀÌ ¾Æ´Ï¶ó ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ¿î¿µÃ¼Á¦ µî¿¡µµ °øÅëÀûÀ¸·Î Àû¿ëµÇ´Â ¹üÀ§ ±ÔÄ¢ÀÌ´Ù. Áï, µðÁöÅ»ÀÇ ¼¼°è¿¡¼­ ¹üÀ§¸¦ ĪÇϸé Ç×»ó ³¡Àº ¹üÀ§¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â °ÍÀ¸·Î Ãë±ÞÇÑ´Ù. ¿Ö³ÄÇϸé ÄÄÇ»ÅÍ¿¡¼­ ¼ýÀÚ´Â 0ºÎÅÍ ½ÃÀÛ(Zero Base)µÇ±â ¶§¹®¿¡ ³¡À» Á¦¿ÜÇØ¾ß Á¦¿ÜµÈ ³¡°ú °³¼ö°¡ ÀÏÄ¡Çϱ⠶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î Å©±â 10ÀÇ ¹è¿­ ar[10]À» 0À¸·Î ä¿ì´Â ÄÚµå´Â º¸Åë ´ÙÀ½°ú °°ÀÌ ·çÇÁ¸¦ ÀÛ¼ºÇÑ´Ù.

 

for (i=0; i<10; i++) ar[i]=0;

 

Á¶°Ç½ÄÀÌ i<10·Î µÇ¾î ÀÖ¾î 10Àº ó¸® ´ë»ó¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. 10ÀÌ Á¦¿ÜµÇ¾î¾ß ar[i]=0; ó¸® ȸ¼ö°¡ 10ÀÌ µÇ¸ç »ç½Ç ar[10]Àº Á¸ÀçÇÏÁöµµ ¾Ê´Â´Ù. Á¶°Ç½ÄÀ» i <= 10 ÀÌ·¸°Ô ½è´Ù°¡´Â ¹«½¼ ºÀº¯À» ´çÇÏ°Ô µÉÁö ¸ð¸¥´Ù. ar ¹è¿­ÀÇ ¸¶Áö¸· ¿ä¼Ò°¡ 9¶ó°í Çؼ­ Á¶°Ç½ÄÀ» i<=9·Î ¾²Áö´Â ¾Ê´Âµ¥ ±â´ÉÀûÀ¸·Î ¶È°°Àº ·çÇÁ¶ó ÇÏ´õ¶óµµ ³¡À» Æ÷ÇÔÇÏ¸é ¿©·¯ ¸ð·Î ºÒÆíÇØÁø´Ù.

STL ÇÔ¼öµéµµ ³»ºÎÀûÀ¸·Î ·çÇÁ¸¦ ¸¹ÀÌ »ç¿ëÇϴµ¥ ¸ðµÎ ÀÌ·± ½ÄÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. STLÀÇ ¸ðµç ÄÁÅ×À̳ʴ ½ÃÀÛÁ¡°ú ³¡´ÙÀ½Á¡À» Á¶»çÇÏ´Â begin, end ¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ³¡´ÙÀ½Á¡(past the end)À̶õ ¸¶Áö¸· ¿ä¼ÒÀÇ ´ÙÀ½À» ÀǹÌÇϴµ¥ ¹è¿­ÀÇ °æ¿ì´Â ¹è¿­ Å©±â¿Í °°Àº ÷ÀÚ°¡ µÉ °ÍÀÌ°í ¿¬°á ¸®½ºÆ®ÀÇ °æ¿ì tail À§Ä¡°¡ µÉ °ÍÀÌ´Ù. ÀÌ ÁöÁ¡Àº ½ÇÁ¦ ÄÁÅ×À̳ÊÀÇ ³»ºÎ´Â ¾Æ´Ï¸ç ÀÌ¹Ì ³¡À» Áö³­ ÁöÁ¡ÀÌÁö¸¸ ¼øȸ³ª ¿¡·¯ 󸮿¡ ¾ÆÁÖ À¯¿ëÇÏ´Ù. ³¡´ÙÀ½Á¡ Á÷Àü±îÁö¸¸ ¼øȸÇϸé ÁöÁ¤ÇÑ ±¸°£ÀÇ ¸ðµç ¿ä¼Ò¸¦ ¾ÈÀüÇÏ°Ô ¹æ¹®ÇÒ ¼ö ÀÖ´Ù. find ÇÔ¼öÀÇ ±¸Çö Äڵ带 º¸ÀÚ.

 

InIt find(InIt first, InIt last, const T& val)

{

     for (;first != last; ++first) {

          if (*first == val) break;

     }

     return first;

}

 

first°¡ °è¼Ó Áõ°¡Çϸ鼭 ÄÁÅ×À̳ÊÀÇ ´ÙÀ½À¸·Î À̵¿Çϴµ¥ Á¶°Ç½ÄÀÌ first != last·Î µÇ¾î ÀÖ´Ù. µû¶ó¼­ first°¡ last°¡ ¾Æ´Ñ µ¿¾È ¼øȸ¸¦ ¹Ýº¹Çϸç last¿¡ µµ´ÞÇßÀ» ¶§ ·çÇÁ¸¦ Å»ÃâÇϹǷΠ°á±¹ last´Â ó¸® ´ë»ó¿¡¼­ Á¦¿ÜµÈ´Ù. Á¶°Ç½ÄÀ» first < last·Î ´ë¼Ò ºñ±³ÇÏÁö ¾Ê°í first != last·Î ºÎµî ºñ±³¸¦ ÇÏ´Â Á¡¿¡ ÁÖ¸ñÇϵµ·Ï ÇÏÀÚ. Á¦¾î º¯¼ö°¡ Á¤¼öÀÏ ¶§´Â ´ÙÀ½Ã³·³ ºÎµî ºñ±³¸¦ ÇÏ´Â °æ¿ì°¡ º°·Î ¾øÀ¸¸ç ÀÌ·¸°Ô ·çÇÁ¸¦ Â¥ º» °æÇèµµ ¾øÀ» °ÍÀÌ´Ù.

 

for (i=0; i!=10; i++) ar[i]=0;

 

Á¤¼ö ·çÇÁ¿¡´Â i < 10ÀÌ Á¤¼®Àε¥ ÀÌ·¸°Ô Çϸé Áõ°¨½ÄÀÌ i+=3À¸·Î °©Àڱ⠹ٲî´õ¶óµµ ¹«³­È÷ ·çÇÁ¸¦ ºüÁ® ³ª°¥ ¼ö ÀÖ´Ù. ±×·¯³ª ¹Ýº¹ÀÚ´Â ´ë¼Ò ºñ±³¸¦ ÇÏÁö ¾Ê°í Ç×»ó ºÎµî ºñ±³¸¦ Çϴµ¥ ¿Ö ±×·±°¡ Çϸé ÀϹÝÈ­µÈ ¹Ýº¹ÀÚ´Â ´ë¼Ò ºñ±³°¡ °¡´ÉÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¸®½ºÆ®ÀÇ ¹Ýº¹ÀÚ´Â ¸Þ¸ð¸® ¿©±â Àú±â¿¡ Èð¾îÁ® ÀÖ´Â ³ëµåÀÇ Æ÷ÀÎÅÍÀε¥ ¾ÕÂÊ ³ëµå°¡ ¹Ýµå½Ã ¾ÕÂÊ ¹øÁö¿¡ ÀÖ´Ù°í º¸ÀåÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ ºÎµî ºñ±³¸¦ ÇÒ ¼ö¹Û¿¡ ¾øÀ¸¸ç ¶ÇÇÑ ¹Ýº¹ÀÚ´Â Àý´ë µÎ Ä­ ÀÌ»ó À̵¿ÇÏÁö ¾ÊÀ¸¹Ç·Î ºÎµî ºñ±³¸¦ Çصµ ¾ÈÀüÇÏ´Ù. ¸¸¾à lastµµ ó¸® ´ë»ó¿¡ Æ÷ÇÔµÈ´Ù¸é ·çÇÁ´Â Á» ´õ º¹ÀâÇØÁö°í °Ô´Ù°¡ ¿¡·¯ ó¸® ¹æ¹ýÀÌ ¹¦¿¬ÇØÁø´Ù.

 

InIt find(InIt first, InIt last, const T& val)

{

     for (;; ++first) {

          if (*first == val) return first;

          if (first == last) break;

     }

     return ???;

}

 

lastÀÇ °ªµµ °Ë»ö ´ë»óÀ̹ǷΠÀÏ´Ü ºñ±³¸¦ ÇÑ ÈÄ lastÀ̸é breakÇØ¾ß ÇÑ´Ù. last±îÁö °Ë»öÀ» Çߴµ¥ °ªÀÌ ¹ß°ßµÇÁö ¾Ê¾Ò´Ù¸é À̶§´Â ½ÇÆÐÀÇ Àǹ̷Π°ú¿¬ ¾î¶² °ªÀ» ¸®ÅÏÇØ¾ß ÇÒ±î? ¹Ýº¹ÀÚ´Â Æ÷ÀÎÅÍÀÇ NULL¿¡ ÇØ´çÇϴ ƯÀÌ°ªÀÌ ¾ø¾î ¸¶¶¥È÷ ½ÇÆи¦ ¾Ë¸® ¹æ¹ýÀÌ ¾ø´Ù. last°¡ ¹üÀ§¿¡¼­ Á¦¿ÜµÈ´Ù¸é last¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌ °Ë»ö ½ÇÆÐÀÇ ¶æÀ¸·Î »ç¿ëµÉ ¼ö Àִµ¥ ±¸°£ ³¡À» Áö³ª¼­ °Ë»öµÇ¾ú´Ù´Â °ÍÀº ÀÚ¿¬½º·´°Ô ¾ø´Ù´Â ¶æÀÌ µÇ´Â °ÍÀÌ´Ù.

¹üÀ§¿¡¼­ ³¡ÀÌ Á¦¿ÜµÊ¿¡ µû¶ó ±¸°£ÀÇ ±æÀ̸¦ °è»êÇÏ´Â ¹æ¹ýµµ ¸í·áÇØÁø´Ù. last¿Í first¸¦ ´Ü¼øÈ÷ »¬¼ÀÇϱ⸸ ÇÏ¸é ±¸°£¿¡ Æ÷ÇÔµÈ ¿ä¼ÒÀÇ °³¼ö°¡ ³ª¿À¸ç first¿Í last°¡ °°À¸¸é ±¸°£ÀÇ ±æÀÌ´Â 0ÀÌ´Ù. ¾Ë°í¸®Áò ÇÔ¼öµéÀº ÃÖÃÊ first != last¸¦ Á¡°ËÇϹǷΠ±¸°£ ±æÀÌ°¡ 0ÀÌ¸é ¾Æ¹« °Íµµ ÇÏÁö ¾Ê°í ¹Ù·Î ¸®ÅÏÇÑ´Ù. ÀÌ·± ¿©·¯ °¡Áö ³í¸®ÀûÀÎ ÀåÁ¡ÀÌ Àֱ⠶§¹®¿¡ ±¸°£À» Ç¥ÇöÇÒ ¶§ ³¡Á¡Àº Á¦¿ÜÇÏ´Â ±ÔÄ¢À» ¾²´Â °ÍÀÌ´Ù.

STLÀ» ¾²´Â µ¿¾È ¹üÀ§ÀÇ ±ÔÄ¢À» Ç×»ó ¿°µÎ¿¡ µÎ¾î¾ß Çϴµ¥ 3¹ø ¿ä¼ÒºÎÅÍ 7¹ø ¿ä¼Ò±îÁö °Ë»öÇÏ°í ½Í´Ù¸é ÇÊ¿äÇÑ °Ë»ö ±¸°£Àº 3~8±îÁöÀÌ´Ù. 3~7±îÁö °Ë»öÇϸé 7¹ø ¿ä¼Ò´Â °Ë»ö ´ë»ó¿¡¼­ Á¦¿ÜµÊÀ» À¯ÀÇÇϵµ·Ï ÇÏÀÚ. ¾Ë°í¸®ÁòÀº Ç×»ó ÁöÁ¤ÇÑ ±¸°£¿¡¼­¸¸ ½ÇÇàµÈ´Ù. º¸Åë begin ~ end±îÁö Àû¿ëÇÏ´Â °æ¿ì°¡ ¸¹Áö¸¸ ¿øÇÑ´Ù¸é ÀϺΠ±¸°£¿¡ ´ëÇؼ­¸¸ Àû¿ëÇÒ ¼öµµ ÀÖ´Ù. sort ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.

 

sort(vi.begin()+1,vi.end()-1);

 

´Ù¼¸ °³ÀÇ ¿ä¼Ò Áß Áß°£ÀÇ ¼¼ ¿ä¼Ò¸¸ Á¤·ÄµÉ °ÍÀÌ´Ù. Á¤·Ä °á°ú´Â 2, 1, 5, 8, 9°¡ µÇ¸ç °¡¿îµ¥ 8, 5, 1¸¸ Á¤·ÄµÇ°í ¾çÂÊ ³¡ÀÇ 2¿Í 9´Â Á¤·Ä ´ë»ó¿¡¼­ Á¦¿ÜµÈ´Ù. ÀϺΠ±¸°£¿¡ ´ëÇؼ­¸¸ °Ë»öÀ» ÇѴٰųª µÚÁý±â¸¦ ÇÒ ¼öµµ ÀÖ´Ù.

¹Ýº¹ÀÚ¿¡ ´ëÇØ ¸¶Áö¸·À¸·Î ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº STL ¾Ë°í¸®ÁòÀº ¹Ýº¹ÀÚÀÇ À¯È¿¼ºÀ» ÀüÇô Á¡°ËÇÏÁö ¾ÊÀ¸¸ç Ç×»ó À¯È¿ÇÏ´Ù°í °¡Á¤ÇÑ´Ù´Â Á¡ÀÌ´Ù. ¹Ýº¹ÀÚ°¡ Ʋ¸° À§Ä¡¸¦ °¡¸®Å°°í ÀÖÀ» °æ¿ìÀÇ °á°ú´Â Á¤ÀǵǾî ÀÖÁö ¾ÊÀºµ¥ Àç¼ö ¾øÀ¸¸é ´Ù¿îµÉ ¼öµµ ÀÖ´Ù. STLµµ °á±¹ ¹üÀ§¸¦ Á¡°ËÇÏÁö ¾Ê´Â C¾ð¾îÀÇ ÇÑ°è´Â ¹þ¾î³ªÁö ¸øÇߴµ¥ ±× ÀÌÀ¯´Â ¹°·Ð ¼º´ÉÀÌ´Ù. ¹Ýº¹ÀÚ¸¦ ÂüÁ¶ÇÒ ¶§¸¶´Ù ¹üÀ§¸¦ ÀÏÀÏÀÌ Á¡°ËÇÏ´Ù°¡´Â ¾öû³­ Èñ»ýÀ» °¨¼öÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¹Ýº¹ÀÚ´Â º¸Åë Áõ°¡, °¨¼Ò¿¡ ÀÇÇØ ±¸°£ ³»¿¡¼­¸¸ ¿òÁ÷À̹ǷΠū ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù.