1.1 Ç¥ÁØ C++ ¶óÀ̺귯¸®(standard C++ library)¶õ? ±¹Á¦ Ç¥ÁØ ±â±¸(International Standards Organization, ISO)¿Í ¹Ì±¹ ±¹°¡ Ç¥ÁØ ±â°ü(American National Standards Institute, ANSI)Àº C++ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ Ç¥ÁØÈ­ ÀÛ¾÷À» ¸¶ÃÆ´Ù. ÀÌ Ç¥ÁØÈ­ °úÁ¤¿¡¼­ °¡Àå Áß¿äÇÑ ºÎºÐÀÇ Çϳª°¡ ¹Ù·Î ¡¸Ç¥ÁØ C++ ¶óÀ̺귯¸®(standard C++ libraray)¡¹À̸ç, ÀÌ ¶óÀ̺귯¸®´Â ¸¹Àº ¾çÀÇ Å¬·¡½º¿Í ÇÔ¼öµéÀ» Á¦°øÇÏ°í ÀÖ´Ù. ANSI/ISO Ç¥ÁØ C++ ¶óÀ̺귯¸®´Â ´ÙÀ½À» Æ÷ÇÔÇÏ°í ÀÖ´Ù. * ¸¹Àº ¾çÀÇ µ¥ÀÌÅÍ ±¸Á¶¿Í ¾Ë°í¸®µë. ƯÈ÷ ÀÌ ºÎºÐ¸¸ µû·Î ¡¸Ç¥ÁØ ÅÛÇø´ ¶óÀ̺귯¸®(standard template library, STL)¡¹¶ó°í ºÎ¸¥´Ù. * ÀÔÃâ·Â ½ºÆ®¸² * locale ±â´É * string ÅÛÇø´ Ŭ·¡½º * complex ÅÛÇø´ Ŭ·¡½º * numeric_limits ÅÛÇø´ Ŭ·¡½º * ¸Þ¸ð¸® °ü¸® ±â´É * Language support ±â´É * ¿¹¿Ü ó¸®(exception handling) ±â´É * ¼öÄ¡ ¹è¿­¿ëÀ¸·Î ÃÖÀûÈ­µÈ valarray Ŭ·¡½º 1.2 Ç¥ÁØ C++ ¶óÀ̺귯¸®(Standard C++ Library)¿Í ´Ù¸¥ ¶óÀ̺귯¸®¿ÍÀÇ Â÷ÀÌÁ¡ Ç¥ÁØ C++ ¶óÀ̺귯¸®´Â Ç¥ÁØ µ¥ÀÌÅÍ ±¸Á¶¿¡ ´ëÇÑ Å¬·¡½º Á¤ÀÇ¿Í ÀÌ·¯ÇÑ µ¥ÀÌÅÍ ±¸Á¶¸¦ ´Ù·ê ¶§ ÁÖ·Î »ç¿ëµÇ´Â ¾Ë°í¸®µëµéÀÌ ´ëºÎºÐÀ» Â÷ÁöÇÏ°í ÀÖ´Ù. ¿¹Àü¿¡´Â ÀÌ·¯ÇÑ Å¬·¡½º Á¤ÀÇ¿Í ¾Ë°í¸®µëµéÀ» STL(Standard Template Library)À̶ó°í ºÒ·¶¾ú´Ù. STLÀÇ ±¸Á¶¿Í ¼³°è´Â ´ëºÎºÐÀÇ ´Ù¸¥ C++ ¶óÀ̺귯¸®¿Í´Â °ÅÀÇ ¸ðµç ¸é¿¡¼­ ¿ÏÀüÈ÷ ´Ù¸£´Ù. ½Ç·Ê·Î, STLÀº ĸ½¶È­(encapsulation)¸¦ ÇÇÇÏ°í ÀÖ°í, »ó¼Ó(inheritance)À» °ÅÀÇ »ç¿ëÇÏ°í ÀÖÁö ¾Ê´Ù. ĸ½¶È­(encapsulation)´Â °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀÇ Æ®·¹ÀÌµå ¸¶Å©¿¡ ÇØ´çÇÑ´Ù. µ¥ÀÌÅÍ¿Í ÇÔ¼ö¸¦ °´Ã¼·Î ¹­´Â´Ù´Â °³³äÀº ¼ÒÇÁÆ®¿þ¾î °³¹ß¿¡¼­ÀÇ °¡Àå °­·ÂÇÑ ¿ø¸®À̸ç, ½ÇÁ¦·Î °¡Àå ÁÖµÈ Å×Å©´ÐÀÌ´Ù. encapsulationÀ» ÀûÀýÈ÷ À߸¸ »ç¿ëÇϸé, Áö³ªÄ¡°Ô º¹ÀâÇÑ ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛµµ ´Ù·ç±â ÀûÀýÇÑ Å©±â·Î ³ª´©¾î¼­ °³¹ßÆÀ¿¡ ¼ÓÇÑ °¢°¢ÀÇ ÇÁ·Î±×·¡¸Ó¿¡°Ô ÇÒ´çÇÒ ¼ö ÀÖ´Ù. »ó¼Ó(inheritance)Àº ÄÚµå °øÀ¯¿Í ¼ÒÇÁÆ®¿þ¾î Àç»ç¿ëÀ» °¡´ÉÄÉÇÏ´Â °­·ÂÇÑ ±â¹ýÀÌ´Ù. ÇÏÁö¸¸, ¿¹¸¦ µé¾î, GUI¿¡¼­ µÎ°¡Áö ÇüÅÂÀÇ À©µµ¿ì´Â ÇϳªÀÇ °øÅëµÈ º£À̽º À©µµ¿ì Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓµÉ ¼ö ÀÖ°í, °¢°¢ÀÇ ¼­ºê Ŭ·¡½º´Â °¢±â ÇÊ¿äÇÑ Àڱ⸸ÀÇ Æ¯Â¡À» Á¦°øÇÒ ¼ö ÀÖ´Ù. ¶Ç ´Ù¸¥ ¿¹·Î, °´Ã¼ÁöÇâ ÄÁÅ×ÀÌ³Ê Å¬·¡½º´Â °øÅëµÈ behavior¸¦ º¸ÀåÇϸç, ´õ ÀϹÝÀûÀΠŬ·¡½º·ÎºÎÅÍ »ó¼ÓÇÏ°í, °øÅëµÈ ¸â¹ö ÇÔ¼ö¸¦ ÃßÃâÇÔÀ¸·Î½á, ÄÚµå Àç»ç¿ëÀ» Áö¿øÇÒ ¼ö ÀÖ´Ù. STLÀÇ ¼³°èÀÚ´Â °´Ã¼ÁöÇâ ¹æ¹ýÀ» ÇÇÇßÀ¸¸ç, °øÅëµÈ µ¥ÀÌÅÍ ±¸Á¶¸¦ »ç¿ëÇÏ¿© ¼öÇàÇÏ´Â ÀÛ¾÷µéÀ» µ¥ÀÌÅͱ¸Á¶ÀÇ Ç¥Çö°ú ºÐ¸®ÇÏ¿´´Ù. µû¶ó¼­, STLÀ» '¾Ë°í¸®µëÀÇ ÁýÇÕ'°ú ÀÌµé ¾Ë°í¸®µëÀ» »ç¿ëÇÏ¿© ´Ù·ç´Â 'µ¥ÀÌÅÍ ±¸Á¶µéÀÇ ÁýÇÕ'À¸·Î º¸´Â °ÍÀÌ ÀûÀýÇÏ´Ù°í ÇÏ°Ú´Ù. 1.3 ºñ°´Ã¼ÁöÇâ¼³°èÀÇ Àå´ÜÁ¡ Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ STL(Standard Template Library) ºÎºÐÀº ¼³°è½Ã ÀϺη¯ °´Ã¼ÁöÇâ ¹æ½ÄÀ» µû¸£Áö ¾Ê¾Ò´Ù. °³¹ßÀÚ´Â ºñ°´Ã¼ÁöÇâÀûÀ¸·Î ¼³°èµÈ STLÀÇ ÀåÁ¡°ú ´ÜÁ¡µéÀ» Àß ÆľÇÇÔÀ¸·Î½á, ¶óÀ̺귯¸®¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̵é Áß ¸î°¡Áö¸¦ »ìÆ캸ÀÚ. ¼Ò½º ÄÚµå Å©±âÀÇ Ãà¼Ò STL¿¡´Â ¾à 50¿©°³ÀÇ ´Ù¾çÇÑ ¾Ë°í¸®µë°ú 10¿©°³ÀÇ ÁÖ¿ä µ¥ÀÌÅÍ ±¸Á¶µéÀÌ µé¾î ÀÖ´Ù. ÀÌ·¸°Ô ¾Ë°í¸®µë°ú µ¥ÀÌÅÍ ±¸Á¶¸¦ ºÐ¸®ÇÔÀ¸·Î½á, ¼Ò½ºÄÚµåÀÇ Å©±â¸¦ ÁÙÀÌ°í, À¯»çÇÑ ÇüÅÂÀÇ ÀÛ¾÷µéÀÌ »óÀÌÇÑ ÇüÅÂÀÇ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°Ô µÉ À§ÇèÀ» ÁÙÀÌ´Â È¿°ú¸¦ °¡Á®¿Â´Ù. ¸¸¾à ÀÌ·¸°Ô ºÐ¸®¸¦ ÇÏÁö ¾Ê´Â´Ù¸é, ¼­·Î ´Ù¸¥ µ¥ÀÌÅÍ ±¸Á¶ °¢°¢¿¡ ´ëÇØ ¸ðµç ¾Ë°í¸®µëµéÀ» ¶Ç ±¸ÇöÇØ¾ß Çϸç, °á±¹ ¼ö ¹é°³ÀÇ ¸â¹öÇÔ¼ö¸¦ ÇÊ¿ä·ÎÇÏ°Ô µÉ °ÍÀÌ´Ù. À¯¿¬¼º ¾Ë°í¸®µë°ú µ¥ÀÌÅ͸¦ ºÐ¸®ÇÔÀ¸·Î½á ¾ò°Ô µÇ´Â ÀåÁ¡Àº STLÀÇ ¾Ë°í¸®µëµéÀÌ ±âÁ¸ÀÇ C++ Æ÷ÀÎÅÍ¿Í ¹è¿­¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. C++ ¹è¿­Àº °´Ã¼°¡ ¾Æ´Ï±â ¶§¹®¿¡, Ŭ·¡½º °èÃþ±¸Á¶³»¿¡ encapsulate µÇ¾î ÀÖ´Â ¾Ë°í¸®µëÀº ÀÌ·¯ÇÑ ±â´ÉÀ» °¡Áú ¼ö ¾ø´Ù. È¿À²¼º ÀϹÝÀûÀ¸·Î Ç¥ÁØ C++ ¶óÀ̺귯¸®´Â ±×¸®°í, ƯÈ÷ STLÀº C++ ÀÀ¿ë ÇÁ·Î±×·¥À» °³¹ßÇϴµ¥ ´ëÇÑ Àú¼öÁØ Á¢±Ù¹ýÀ» Á¦°øÇÑ´Ù. ÀÌ¿Í °°Àº Àú¼öÁØ Á¢±Ù¹ýÀº ƯÁ¤ ÇÁ·Î±×·¥ÀÌ È¿À²ÀûÀÎ ÄÚµù°ú ¼öÇà¼Óµµ¿¡ ÁßÁ¡À» µÎ°í ÀÖÀ» ¶§ À¯¿ëÇÏ´Ù. ¹Ýº¹ÀÚ(iterator): ºÒÀÏÄ¡(mismatch)¿Í ¹«È¿È­(invalidation) Ç¥ÁØ C++ ¶óÀ̺귯¸® µ¥ÀÌÅÍ ±¸Á¶´Â ¹Ýº¹ÀÚ¶ó ºÒ¸®´Â Æ÷ÀÎÅÍ¿Í ºñ½ÁÇÑ °´Ã¼¸¦ »ç¿ëÇÏ¿© ÄÁÅ×À̳ÊÀÇ ³»¿ë¹°À» °¡¸®Å²´Ù(2Àå¿¡¼­ ÀÚ¼¼È÷ ¼³¸í). ÀÌ ¶óÀ̺귯¸®ÀÇ ¾ÆÅ°ÅØÃÄ¿¡¼­´Â ÀÌµé ¹Ýº¹ÀÚµéÀÌ °°Àº ÄÁÅ×À̳ʷκÎÅÍ ¿Â°ÍÀÎÁö¸¦ Áõ¸íÇϱⰡ ºÒ°¡´ÉÇÏ´Ù. °íÀÇµç ¿ì¿¬À̵ç ÇÑ ÄÁÅ×À̳ÊÀÇ ½ÃÀÛ ¹Ýº¹ÀÚ¸¦ ´Ù¸¥ ÄÁÅ×À̳ÊÀÇ ³¡ ¹Ýº¹ÀÚ¿Í °°ÀÌ »ç¿ëÇÏ°Ô µÇ¸é ¾î¶² ÀÏÀÌ ÀϾ°Ô µÉ Áö Àå´ãÇÒ ¼ö ¾ø°Ô µÈ´Ù. ±×¸®°í, ¹Ýº¹ÀÚ´Â ÀڽŰú ¿¬°üµÈ ÄÁÅ×À̳ʿ¡ ´ëÇØ »ðÀÔÀ̳ª ¹Ýº¹À» ¼öÇàÇÑ µÚ¿¡, ¹«È¿È­ µÉ ¼öµµ ÀÖ´Ù´Â »ç½ÇÀ» ÇÁ·Î±×·¡¸Ó´Â ¹Ýµå½Ã ±â¾ïÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô ¹«È¿È­µÈ ¹Ýº¹ÀÚ¸¦ °Ë»çµµ ¾Ê°í »ç¿ëÇÏ°Ô µÇ¸é ¿¹»óÄ¡ ¸øÇÑ °á°ú¸¦ ÃÊ·¡ÇÏ°Ô µÈ´Ù. Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡ Àͼ÷ÇØÁ®¾ß ¹Ýº¹ÀÚ¿Í °ü·ÃµÈ ¿¡·¯ÀÇ ¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù. ÅÛÇø´: ¿¡·¯¿Í ÄÚµå È®´ë('code bloat') ÅÛÇø´ ¾Ë°í¸®µëÀ» »ç¿ëÇÔÀ¸·Î½á À¯¿¬¼º°ú °­Á¡À» ¾ò°Ô µÇÁö¸¸, ´Ù¸¥ ÇÑÆíÀ¸·Î µð¹ö±ëÀÌ Èûµé¾îÁø´Ù. generic ¾Ë°í¸®µëÀÇ ÀÎÀÚ ¸®½ºÆ®¿¡¼­ÀÇ ¿¡·¯´Â ÅÛÇø´ È®Àå °úÁ¤¿¡¼­ ±í¼÷È÷ Á¤ÀǵǾî ÀÖ´Â ³»ºÎÇÔ¼ö¿¡ ´ëÇÑ ÄÄÆÄÀÏ·¯ ¿¡·¯¸¦ À¯¹ßÇÏ°Ô µÇ¾î ¸Å¿ì ÀÌÇØÇϱⰡ Èûµé¾îÁö°Ô µÈ´Ù. ¾Ë°í¸®µëÀÌ ¿ä±¸ÇÏ´Â ¹Ù¸¦ Àß ÀÌÇØÇÏ¿©¾ß, Ç¥ÁØ ¶óÀ̺귯¸®¸¦ ¼º°øÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. STLÀº ÅÛÇø´¿¡ Å©°Ô ÀÇÁ¸ÇÏ°í Àֱ⠶§¹®¿¡, STLÀ» »ç¿ëÇÑ ÇÁ·Î±×·¥Àº »ý°¢Çß´ø °Íº¸´Ù µ¢Ä¡°¡ ÈξÀ Ä¿Áú ¼ö ÀÖ´Ù.(º¸Åë 'code bloat'¶ó ÁöĪ) ƯÁ¤ ÅÛÇø´ Ŭ·¡½º¸¦ °³Ã¼È­Çϴµ¥ µå´Â ºñ¿ëÀ» ÀνÄÇÏ¿© ÀûÀýÇÑ °áÁ¤À» ÇØ¾ß ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÃÖ¼ÒÈ­ÇÒ ¼ö ÀÖ´Ù(¿ª½Ã ¾î·Á¿î ¹®Á¦). ÄÄÆÄÀÏ·¯°¡ ÅÛÇø´À» ó¸®Çϴµ¥ ÀÖ¾î Á»´õ ¶È¶ÈÇØÁø´Ù¸é, ÀÌ·¯ÇÑ ¹®Á¦µéÀ» ÁÙÀÏ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¹®Á¦Á¡: ´ÙÁß ¾²·¹µù ´ÙÁß ¾²·¹µå ȯ°æÇÏ¿¡¼­ Ç¥ÁØ C++ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¶§´Â Á¶½ÉÇØ¾ß ÇÑ´Ù. ¹Ýº¹ÀÚ´Â ÄÁÅ×À̳ʿʹ µ¶¸³ÀûÀ¸·Î Á¸ÀçÇϱ⠶§¹®¿¡ ¾²·¹µåµé°£¿¡ ¾ÈÀüÇÏ°Ô Àü´ÞÇÒ ¼ö°¡ ¾ø´Ù. 1.4 STLÀÇ ±¸Á¶ ¼ÒÇÁÆ®¿þ¾î¸¦ ±¸¼ºÇÏ´Â ¿ä¼ÒµéÀ» 3Â÷¿ø ÁÂÇ¥°è·Î Ç¥½ÃÇÑ´Ù¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ù¹ø° Â÷¿øÀº µ¥ÀÌÅÍ Å¸ÀÔ(int, double µîµî)À» ³ªÅ¸³»¸ç, µÎ¹ø° Â÷¿øÀº ¼­·Î ´Ù¸¥ ÄÁÅ×À̳Ê(vector, list µîµî)¸¦ ³ªÅ¸³»¸ç, ¼¼¹ø° Â÷¿øÀº ÄÁÅ×À̳ʿ¡ ´ëÇÑ ¿©·¯ ¾Ë°í¸®µë(°Ë»ö, Á¤·Ä,»èÁ¦ µîµî)À» ³ªÅ¸³½´Ù. °¢ Â÷¿øÀÇ Å©±â°¡ °¢°¢ i, j, k¶ó°í ÇÑ´Ù¸é, i*j*k °¡ÁöÀÇ Äڵ带 ¸ðµÎ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. µ¥ÀÌÅÍ Å¸ÀÔÀ» ÀÎÀÚ·Î »ç¿ëÇÏ´Â ÅÛÇø´ ±â´ÉÀ» »ç¿ëÇϸé, j*k °¡Áö·Î ÁÙÀÏ ¼ö ÀÖ´Ù. ´õ ³ª¾Æ°¡¼­, ¾Ë°í¸®µëÀ» ¿©·¯°¡Áö ÄÁÅ×À̳ʿ¡ µÎ·ç »ç¿ëµÇµµ·Ï ¸¸µç´Ù¸é, j+k °¡ÁöÀÇ Äڵ带 »ý¼ºÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î, double, int, string ŸÀÔÀÇ ¿ø¼Ò¸¦ ´ã°í ÀÖ´Â vector, list, set ÄÁÅ×À̳ʿ¡ ´ëÇØ Á¤·Ä, °Ë»ö, »èÁ¦ ¾Ë°í¸®µëÀ» ¸¸µé·Á¸é, ÃÑ 27°¡ÁöÀÇ ¾Ë°í¸®µëÀ» ¸¸µé¾î¾ß ÇÏÁö¸¸, ¾Æ·¡ ±×¸²°ú °°ÀÌ µ¥ÀÌÅÍ Å¸ÀÔ, ÄÁÅ×À̳Ê, ¾Ë°í¸®µëÀ» ¸ðµÎ ºÐ¸®ÇÔÀ¸·Î½á, 3°¡ÁöÀÇ ÄÁÅ×ÀÌ³Ê¿Í 3°¡ÁöÀÇ ¾Ë°í¸®µë¸¸À» °í¾ÈÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ¾Æ·¡ ±×¸²ÀÇ ÆĶõ Á¡Àº 'Á¤¼ö' 'list'¸¦ 'Á¤·Ä'ÇÏ´Â ¾Ë°í¸®µëÀ» ³ªÅ¸³»°í ÀÖ´Ù. "±×¸²"[STLÀÇ ±¸Á¶] ¶óÀ̺귯¸®¸¦ ÀÌ¿Í °°Àº ±¸Á¶·Î ¸¸µç´Ù¸é ¼ÒÇÁÆ®¿þ¾î ¼³°è ÀÛ¾÷·®À» »ó´çÈ÷ ÁÙÀÏ ¼ö ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â ¿ä¼ÒµéÀ» »ç¿ëÀÚ°¡ ¸¸µç ¿ä¼Òµé°ú °°ÀÌ »ç¿ëÇÏ´Â °ÍÀÌ ¾ÆÁÖ ÀÚ¿¬½º·¯¿öÁø´Ù. ´Ù½Ã ¸»Çؼ­, ¶óÀ̺귯¸®¿¡¼­ Á¦°øÇÏ´Â ¾Ë°í¸®µëÀ» »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ÄÁÅ×À̳ʿ¡ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, »ç¿ëÀÚ°¡ ¸¸µç ¾Ë°í¸®µëÀ» ¶óÀ̺귯¸®°¡ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ¿©·¯ ÄÁÅ×À̳ʿ¡ Àû¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. 1.5 STL ¸Àº¸±â ÀÌ Àý¿¡¼­´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ ´ëºÎºÐÀ» Â÷ÁöÇÏ´Â STL¿¡ ´ëÇÑ °¨À» Àâ±â À§ÇØ °£´ÜÇÑ ÇÁ·Î±×·¥À» ¿¹·Î µé¾î ¼³¸íÇÑ´Ù. ÀÏ´Ü, Æò¹üÇÑ C++ ÇÁ·Î±×·¥¿¡¼­ ½ÃÀÛÇÏ¿© Ç¥ÁØ C++ ¶óÀ̺귯¸®°¡ Á¦°øÇϴ Ư¡µéÀ» Çϳª¾¿ Àû¿ëÇØ °¡¸é¼­, ÇÁ·Î±×·¥À» ¹öÀü¾÷Çϱâ·Î ÇÏÀÚ. 1.5.1 ÇÁ·Î±×·¥ 1: STLÀ» ÀüÇô »ç¿ëÇÏÁö ¾ÊÀ½ ´ÙÀ½Àº Á¤¼ö°ªµéÀ» ÀÔ·ÂÀ¸·Î ¹Þ¾Æµé¿©¼­, À̵éÀ» Á¤·ÄÇÏ°í, °á°ú¸¦ Ãâ·ÂÇÏ´Â ¾ÆÁÖ °£´ÜÇÑ C++ ÇÁ·Î±×·¥ÀÌ´Ù. #include #include // qsort()ÀÇ ÀÎÀÚ·Î ¾²ÀÏ ºñ±³ÇÔ¼ö inline int cmp(const void *a, const void *b) { int aa = *(int *)a; int bb = *(int *)b; return (aa < bb) ? -1 : (aa > bb) ? 1 : 0; } main() { const int size = 1e5; int array[size]; // 100,000°³ÀÇ Á¤¼ö·Î ÀÌ·ç¾îÁø ¹è¿­ // ÀÔ·Â int n = 0; while (cin >> array[n]) n++; n--; // Á¤·Ä qsort(array, n, sizeof(int), cmp); // Ãâ·Â for (int i = 0; i < n; i++) cout << array[i] << endl; } 1.5.2 ÇÁ·Î±×·¥ 2: ÄÁÅ×À̳Ê, ¹Ýº¹ÀÚ, ¾Ë°í¸®µë STLÀº ¿©·¯ Á¾·ùÀÇ ÄÁÅ×À̳ʵéÀ» Á¦°øÇÑ´Ù. ÄÁÅ×À̳ʶõ °´Ã¼µéÀ» ´ã¾ÆµÑ ¼ö ÀÖ´Â °´Ã¼¸¦ ¸»Çϴµ¥, ¿©±â¼­´Â vector¸¦ »ç¿ëÇغ¸µµ·Ï ÇÏÀÚ. vector´Â ¹è¿­°ú ºñ½ÁÇÏÁö¸¸, ÇÊ¿ä¿¡ µû¶ó ½º½º·Î »çÀÌÁ ´Ã¸± ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ¹è¿­°ú Â÷ÀÌ°¡ ³­´Ù. µû¶ó¼­, ¼±¾ðÇÒ ¶§ ¹è¿­Ã³·³ ¹Ì¸® »çÀÌÁ Á¤ÇØÁÖÁö ¾Ê¾Æµµ µÈ´Ù. vector´Â push_back() ¿¬»êÀ» Á¦°øÇϴµ¥, ÀÌ ¿¬»êÀº vectorÀÇ ¸Ç µÚ¿¡ ¿ø¼Ò¸¦ Áý¾î ³Ö´Â ÀÏÀ» ÇÑ´Ù. size() ¸â¹öÇÔ¼ö´Â vector¿¡ ´ã±ä ¿ø¼ÒÀÇ °¹¼ö¸¦ ¹ÝȯÇÑ´Ù. STL¿¡¼­´Â sort() ¾Ë°í¸®µëÀ» ÀÌ¿ëÇÏ¿© ÄÁÅ×À̳ʸ¦ Á¤·ÄÇÑ´Ù. ¾Õ¿¡¼­µµ ¸»ÇßÁö¸¸, STLÀº °´Ã¼ÁöÇâÀûÀ¸·Î ¼³°èµÈ ¶óÀ̺귯¸®¿Í´Â ´Þ¸®, ¾Ë°í¸®µë°ú ÄÁÅ×À̳ʸ¦ ¿ÏÀüÈ÷ ºÐ¸®ÇÏ°í ÀÖ´Ù. ´Ù½Ã ¸»Çؼ­, vector ÄÁÅ×À̳ʸ¸À» À§ÇÑ Á¤·Ä ¾Ë°í¸®µëÀÌ µû·Î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÄÁÅ×ÀÌ³Ê Á¾·ù¿Í´Â ¹«°üÇÏ°Ô(º¸Åë 'orthogonal'À̶ó´Â ¿ë¾î¸¦ »ç¿ë) »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Ë°í¸®µëÀ» Á¦°øÇÑ´Ù´Â °ÍÀÌ´Ù. ¾Ë°í¸®µëÀ» ÄÁÅ×À̳ʿ¡ Àû¿ëÇϱâ À§Çؼ­ ÇÊ¿äÇÑ °ÍÀÌ ¹Ù·Î ¹Ýº¹ÀÚ(iterator)ÀÌ´Ù. ¹Ýº¹ÀÚ´Â ÄÁÅ×À̳ʳ»ÀÇ Æ¯Á¤ À§Ä¡¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿Í ºñ½ÁÇÑ °³³äÀ̶ó°í º¸¸é µÇ¸ç, ÀÌ ¹Ýº¹ÀÚ¸¦ ÅëÇØ ÄÁÅ×À̳ʳ»ÀÇ ¿ø¼ÒµéÀ» ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ´Ù·ç°Ô µÇ´Â °ÍÀÌ´Ù. ´Ù½Ã¸»ÇØ, ¹Ýº¹ÀÚ´Â ¾Ë°í¸®µë°ú ÄÁÅ×À̳ʸ¦ ¿¬°áÇÏ´Â ¸Å°³Ã¼ÀÌ´Ù. begin()Àº ÄÁÅ×À̳ÊÀÇ ¸Ç ù¹ø° ¿ø¼ÒÀÇ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ºñ½ÁÇÏ°Ô, end()´Â ÄÁÅ×À̳ÊÀÇ ¸Ç ¸¶Áö¸· ¿ø¼ÒÀÇ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ µÎ ¹Ýº¹ÀÚ¿Í ¾Ë°í¸®µëÀ» ÀÌ¿ëÇÏ¿© ÄÁÅ×À̳ÊÀÇ ¿ø¼ÒµéÀ» Á¤·ÄÇÑ´Ù. ¹æ±Ý ¼³¸íÇÑ °ÍµéÀ» ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥ 1À» ´ÙÀ½°ú °°ÀÌ °íÄ¥ ¼ö ÀÖ´Ù. #include main() { vector v; // ÀÔ·Â int input; while (cin >> input) v.push_back(input); // Á¤·Ä sort(v.begin(), v.end()); // Ãâ·Â for (int i = 0; i < v.size(); i++) cout << v[i] << endl; } ÄÁÅ×À̳Ê(container), ¾Ë°í¸®µë(algorithm), ¹Ýº¹ÀÚ(iterator) ÀÌ ¼¼°¡Áö°¡ STL¿¡¼­ °¡Àå Áß¿äÇÑ °ÍµéÀ̸ç, ƯÈ÷ ¹Ýº¹ÀÚ¸¦ ´É¼÷ÇÏ°Ô ´Ù·ç¾î¾ß STLÀ» Àß È°¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 1.5.3 ÇÁ·Î±×·¥ 3: ¹Ýº¹ÀÚ ¾î´ðÅÍ #include main() { vector v; istream_iterator start(cin), end; back_insert_iterator > dest(v); // ÀÔ·Â copy(start, end, dest); // Á¤·Ä sort(v.begin(), v.end()); // Ãâ·Â copy(v.begin(), v.end(), ostream_iterator(cout, "\n")); }