5.1 vector µ¥ÀÌÅÍ Ãß»ó(data abstraction) vector ÄÁÅ×ÀÌ³Ê Å¬·¡½º´Â ±âÁ¸ C ¹è¿­ÀÇ °³³äÀ» ÀϹÝÈ­½ÃŲ °ÍÀÌ´Ù. ¹è¿­°ú ¸¶Âù°¡Áö·Î, vectorµµ ÷ÀÚ¿¡ ÀÇÇÑ Á¢±ÙÀÌ °¡´ÉÇϸç, ÀÌ ¶§ ÷ÀÚÀÇ ¹üÀ§´Â 0ºÎÅÍ ¿ø¼ÒÀÇ °¹¼öº¸´Ù Çϳª ÀÛÀº ¼ö±îÁöÀÌ´Ù. ¶ÇÇÑ [] ¿¬»êÀÚ¸¦ ÀÌ¿ëÇؼ­ vector¿¡ °ªÀ» ´ëÀÔÇϰųª vector·ÎºÎÅÍ °ªÀ» ÃßÃâÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª, ÀÌ·¯ÇÑ °øÅëÁ¡¿Ü¿¡ ¹è¿­°ú vector´Â ´ÙÀ½°ú °°Àº Â÷ÀÌÁ¡À» °¡Áö°í ÀÖ´Ù. * vector´Â ÀÏ¹Ý ¹è¿­º¸´Ù Àڽſ¡ °üÇÑ Á¤º¸¸¦ ´õ ¸¹ÀÌ °¡Áö°í ÀÖ´Ù. ƯÈ÷, vectorÀÇ Å©±â³ª ÀáÁ¤ÀûÀ¸·Î °¡Áú ¼ö ÀÖ´Â ¿ø¼ÒÀÇ °¹¼ö¿¡ °üÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. * vectorÀÇ Å©±â´Â µ¿ÀûÀ¸·Î º¯ÇÒ ¼ö ÀÖ´Ù. »õ·Î¿î ¿ø¼Ò¸¦ vectorÀÇ ³¡À̳ª Áß°£¿¡ »ðÀÔÇÒ ¼ö ÀÖ´Ù. ¸Þ¸ð¸® °ü¸®´Â È¿À²ÀûÀÌ°í ÀÚµ¿ÀûÀ¸·Î ´Ù·ç¾îÁø´Ù. ±×·¯³ª, vector Áß°£¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÒ ¶§´Â listó·³ È¿À²ÀûÀÌÁö ¾Ê´Ù´Â Á¡¿¡ ÁÖ¸ñÇØ¾ß ÇÑ´Ù. ¸¹Àº »ðÀÔ ¿¬»êÀ» ¼öÇàÇÑ´Ù¸é, vector´ë½Å¿¡ list¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ vector ÄÁÅ×ÀÌ³Ê Å¬·¡½º´Â 7Àå¿¡¼­ ´Ù·ê deque('µ¦'À̶ó°í ¹ßÀ½ÇÑ´Ù.)°ú ¸¹Àº Á¡¿¡¼­ ºñ±³°¡ µÈ´Ù. vector¿Í °°ÀÌ dequeµµ À妽ÌÀÌ °¡´ÉÇÑ ÀڷᱸÁ¶ÀÌ´Ù. ÀÌ µÑÀÇ °¡Àå Å« Â÷ÀÌÁ¡Àº dequeÀº ÄÁÅ×À̳ÊÀÇ ¾Õ°ú ³¡¿¡¼­ÀÇ »ðÀÔÀÌ È¿À²ÀûÀÎ ¹Ý¸é¿¡, vector¿¡¼­´Â ³¡¿¡¼­ »ðÀÔÇÒ ¶§¸¸ È¿À²ÀûÀ̶ó´Â °ÍÀÌ´Ù. ¸¹Àº °æ¿ì¿¡, µÑÁß ¾î´À °ÍÀ» »ç¿ëÇصµ »ó°ü¾øÁö¸¸, ÀϹÝÀûÀ¸·Î vector¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Á»´õ ÀÛÀº ½ÇÇàÈ­ÀÏÀ» ¸¸µé ¼ö ÀÖ´Â ¹Ý¸é¿¡, dequeÀº ¼öÇàµÇ´Â ¿¬»êÀÇ Á¾·ù¿¡ µû¶ó Á¶±Ý ºü¸¥ ÇÁ·Î±×·¥À» ¸¸µé±âµµ ÇÑ´Ù. 5.1.1 Include È­ÀÏ vector¸¦ »ç¿ëÇÏ·Á¸é vector Çì´õÈ­ÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù. #include 5.2 º¤ÅÍ ¿¬»ê ÀÌÀý¿¡¼­´Â vector°¡ Á¦°øÇÏ´Â ¸â¹ö ÇÔ¼öµé¿¡ °üÇØ Á»´õ ÀÚ¼¼È÷ »ìÆ캻´Ù. ¾ÕÀ¸·Îµµ °è¼Ó ¾ð±ÞÇÏ°ÚÁö¸¸, ¸â¹öÇÔ¼ö´Â ±âÃÊÀûÀÎ ¿¬»êµéÀ» Á¦°øÇÏ´Â ¹Ý¸é¿¡, 13Àå°ú 14Àå¿¡¼­ ¼Ò°³ÇÒ generic ¾Ë°í¸®µëÀ» »ç¿ëÇÔÀ¸·Î½á Ç¥ÁØ ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â ÀڷᱸÁ¶µéÀ» º¸´Ù À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 5.2.1 º¤ÅÍÀÇ ¼±¾ð°ú ÃʱâÈ­ [Image] Requirements of an Element Type vector´Â ÅÛÇø´ Ŭ·¡½ºÀ̹ǷΠ¿ø¼ÒÀÇ Å¸ÀÔÀ» ¸í½ÃÇØÁÖ¾î¾ß ÇÑ´Ù. ¿ø¼ÒÀÇ Å¸ÀÔÀº integer³ª double°ú °°Àº primitive ŸÀÔÀ̳ª, Æ÷ÀÎÅÍ Å¸ÀÔÀÌ µÉ ¼öµµ ÀÖ°í, »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀÌ µÉ ¼öµµ ÀÖ´Ù. ÈÄÀÚÀÇ °æ¿ì, »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀº ¹Ýµå½Ã ±âº» »ý¼ºÀÚ¸¦ ¹Ýµå½Ã Á¤ÀÇÇØ¾ß ÇÑ´Ù. º¹»ç »ý¼ºÀÚµµ ¸í½ÃÀûÀ¸·Î³ª ¹¬½ÃÀûÀ¸·Î ¹Ýµå½Ã Á¸ÀçÇØ¾ß ÇÑ´Ù. ¹è¿­°ú ¸¶Âù°¡Áö·Î, vectorµµ ÀÚ½ÅÀÌ Æ÷ÇÔÇÏ°Ô µÉ ¿ø¼ÒÀÇ °¹¼ö¸¦ ³ªÅ¸³»´Â Á¤¼ö ÀÎÀÚ·Î ¼±¾ðµÇ´Â °ÍÀÌ °¡Àå ÈçÇÑ °æ¿ì´Ù. vector vec_one(10); ÀÌ¿Í °°Àº »óȲ¿¡¼­ vector¸¦ »ý¼ºÇϱâ À§ÇØ »ç¿ëµÇ´Â »ý¼ºÀÚ´Â Å°¿öµå explicit·Î ¼±¾ðµÈ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÀÌ »ý¼ºÀÚ°¡ º¯È¯ ¿¬»êÀÚ·Î »ç¿ëµÇ´Â °ÍÀ» ¸·´Â °ÍÀÌ´Ù. (ÀÌ´Â ÀϹÝÀûÀ¸·Î ±¦ÂúÀº »ý°¢ÀÌ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é, º»ÀÇ¾Æ´Ï°Ô Á¤¼ö¸¦ vector·Î º¯È­ÇÒ ¼ö°¡ Àֱ⠶§¹®ÀÌ´Ù.) vector¸¦ »ý¼ºÇϱâ À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Â »ý¼ºÀÚ¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ´Ù. »çÀÌÁî »Ó¸¸ ¾Æ´Ï¶ó, vector¸¦ ÃʱâÈ­Çϴµ¥ »ç¿ëµÇ´Â »ó¼ö°ªÀ» Á¦°øÇÏ´Â »ý¼ºÀÚµµ ÀÖ´Ù. »çÀÌÁî°¡ ¸í½ÃµÇÁö ¾ÊÀ¸¸é, vector´Â ¾Æ¹«·± ¿ø¼Ò¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀº »óÅ·Π»ý¼ºµÇ°Ô µÇ¸ç, ¿ø¼Ò°¡ Ãß°¡µÉ ¶§ ÀÚµ¿ÀûÀ¸·Î »çÀÌÁî°¡ Áõ°¡ÇÏ°Ô µÈ´Ù. º¹»ç »ý¼ºÀÚ´Â ´Ù¸¥ vector·ÎºÎÅÍ Å¬·ÐÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. vector vec_two(5, 3); // º¹»ç »ý¼ºÀÚ vector vec_three; vector vec_four(vec_two); // ´ëÀÔ¿¡ ÀÇÇÑ ÃʱâÈ­ ½ÃÀÛ ¹Ýº¹ÀÚ¿Í ³¡ ¹Ýº¹ÀÚ pair¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ ÄÝ·º¼ÇÀÇ ¿ø¼Òµé·Î vector¸¦ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù. À̵é ÀÎÀÚ·Î µé¾î°¡´Â ¹Ýº¹ÀÚÀÇ ÇüÅ´ ¾Æ¹«°Å³ª °¡´ÉÇϹǷÎ, ¹Ýº¹ÀÚ¸¦ Á¦°øÇÏ´Â ÄÁÅ×À̳ʿ¡ ´ã±ä °ªµéÀ̱⸸ Çϸé ÀÌµé °ªµéÀ» °¡Áö°í ÃʱâÈ­°¡ °¡´ÉÇÏ´Ù. vector vec_five(aList.begin(), aList.end()); [Image] Constructors and Iterators vector°£ÀÇ ´ëÀÔµµ °¡´ÉÇϸç, À̶§ ´ëÀÔ ¿¬»êÀÚÀÇ Áº¯Àº ¿ìº¯ vectorµéÀÇ º¹»çº»À» °¡Áö°Ô µÈ´Ù. vec_three = vec_five; assign() ¸â¹öÇÔ¼ö´Â ´ëÀÔ ¿¬»êÀÚ¿Í ºñ½ÁÇÏÁö¸¸, ´õ ±â´ÉÀÌ ¸¹´Ù. ÀÎÀÚ°¡ ´õ ¸¹À» °æ¿ìµµ ÀÖ´Ù. ´ëÀÔ°ú ¸¶Âù°¡Áö·Î, ÄÁÅ×À̳ʿ¡ ´ã±ä °ªµéÀº ÀÎÀÚ·Î ¸í½ÃµÈ °ªµé·Î ¹Ù²î°Ô µÈ´Ù. µÎ°¡Áö ÇüÅÂÀÇ assign()ÀÌ Àִµ¥, ù¹ø°´Â ´Ù¸¥ ÄÁÅ×À̳ÊÀÇ ¼­ºê ½ÃÄö½º¸¦ °¡¸®Å°´Â µÎ°³ÀÇ ¹Ýº¹ÀÚ¸¦ ÃëÇÑ´Ù. ÀÌ ¼­ºê ½ÃÄö½º·ÎºÎÅÍÀÇ °ªµéÀº ¹Þ´Â ÂÊ¿¡¼­ÀÇ »õ·Î¿î °ªµéÀÌ µÈ´Ù. assign()ÀÇ µÎ¹ø° ÇüÅ´ °¹¼ö¿Í ÄÁÅ×ÀÌ³Ê ¿ø¼Ò ŸÀÔÀÇ °ªÀÌ(ÀÌ°ÍÀº »ý·« °¡´É) ÀÎÀÚ·Î Á¦°øµÈ´Ù. ÇÔ¼öÈ£ÃâÀ» Çѵڿ¡´Â count·Î ¸í½ÃµÈ °¹¼öÀÇ ¿ø¼Òµé¸¸ °¡Áö°Ô µÇ°í, ÀÌ ¿ø¼ÒµéÀº ±âº»°ª°ú °°°Å³ª, ¸í½ÃÇÑ ÃʱⰪ°ú °°°Ô µÈ´Ù. vec_six.assign(list_ten.begin(), list_ten.end()); vec_four.assign(3, 7); // '7'À» 3°³ ´ëÀÔ vec_five.assign(12); // '0'À» 12°³ ´ëÀÔ ¿ø¼ÒÀÇ Å¸ÀÔÀÌ ¼Ò¸êÀÚ¸¦ Á¤ÀÇÇÏ°í ÀÖ´Ù¸é, ÄÝ·º¼ÇÀ¸·ÎºÎÅÍ ÀÌµé ¿ø¼Ò°¡ »èÁ¦µÉ ¶§, ÀÌ ¼Ò¸êÀÚ¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ¸¶Áö¸·À¸·Î, swap() ¿¬»êÀÚ¸¦ ÅëÇØ µÎ vector°£¿¡ °¢ÀÚ °¡Áö°í ÀÖ´ø ¿ø¼ÒµéÀ» ¸ðÁ¶¸® ¹Ù²ãÄ¡±â ÇÒ ¼öµµ ÀÖ´Ù. ÀÎÀÚ·Î µé¾î°¡´Â ÄÁÅ×À̳ʴ ¼ö½ÅÀÚÀÇ °ªµéÀ» °¡Áö°Ô µÇ°í, ¼ö½ÅÀÚ´Â ÀÎÀÚ·Î µé¾î°¡´Â ÄÁÅ×À̳ÊÀÇ °ªµéÀ» °¡Áö°Ô µÈ´Ù. ÀÌ swap()Àº ¸Å¿ì È¿À²ÀûÀ̱⠶§¹®¿¡, ¿ø¼Òº°·Î Àü¼ÛÇÒ ¶§´Â ¹Ýµå½Ã ÀÌ°ÍÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. vec_three.swap(vec_four); 5.2.2 ŸÀÔ Á¤ÀÇ vector Ŭ·¡½º´Â ¸¹Àº ¼öÀÇ Å¸ÀÔ Á¤ÀǸ¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. À̵éÀº ¼±¾ð¹®¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î, Á¤¼ö vectorÀÇ ¹Ýº¹ÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. vector::iterator location; iterator »Ó¸¸ ¾Æ´Ï¶ó ´ÙÀ½°ú °°Àº ŸÀԵ鵵 Á¤ÀǵǾî ÀÖ´Ù. value_type º¤ÅÍ°¡ °ü¸®ÇÏ´Â ¿ø¼ÒµéÀÇ Å¸ÀÔ const_iterator ÇϺΠ½ÃÄö½º¸¦ º¯°æÇÒ ¼ö ¾ø´Â ¹Ýº¹ÀÚ reverse_iterator ¿ª À̵¿ ¹Ýº¹ÀÚ const_reverse_iterator À§ µÎ°¡Áö ¼ºÁúÀ» µ¿½Ã¿¡ °¡Áö´Â ¹Ýº¹ÀÚ reference º¤ÅÍ ¿ø¼Ò¿¡ ´ëÇÑ ÂüÁ¶ const_reference ¿ø¼Ò¸¦ º¯°æÇÒ ¼ö ¾ø´Â ÂüÁ¶ size_type ÄÁÅ×À̳ÊÀÇ »çÀÌÁ ÂüÁ¶ÇÒ ¶§ »ç¿ëµÇ´Â ºñºÎÈ£ Á¤¼öÇü difference_type ¹Ýº¹ÀÚ°£ÀÇ °Å¸®Â÷¸¦ ³ªÅ¸³¾ ¶§ »ç¿ëµÇ´Â ºÎÈ£ Á¤¼öÇü allocator_type º¤ÅÍÀÇ ¸Þ¸ð¸®¸¦ °ü¸®Çϴµ¥ »ç¿ëµÇ´Â ÇÒ´ç±â ŸÀÔ 5.2.3 º¤ÅÍÀÇ Ã·ÀÚ ¿¬»ê ƯÁ¤ À妽º À§Ä¡¿¡¼­ vector°¡ °ü¸®ÇÏ´Â °ªÀ» Á¢±ÙÇϰųª º¯°æÇÒ ¶§´Â ÷ÀÚ ¿¬»êÀÚ¸¦ »ç¿ëÇϸç, ÀÌ´Â ÀÏ¹Ý ¹è¿­°ú µ¿ÀÏÇÏ´Ù. ¶ÇÇÑ, À妽º °ªÀÇ À¯È¿¼º¿¡ ´ëÇÑ °Ë»ç¸¦ ÇÏÁö ¾Ê´Â´Ù. »ó¼ö vector¸¦ À妽ÌÇÏ¸é »ó¼ö ·¹ÆÛ·±½º°¡ »ý¼ºµÈ´Ù. À¯¿äÇÑ À妽º ¹üÀ§¸¦ ¹þ¾î³ª´Â vector¸¦ À妽ÌÇÒ ¶§´Â ¾î¶² °á°ú°¡ ³ª¿ÃÁö ¿¹ÃøÇÒ ¼ö ÀÖ´Ù. cout << vec_five[1] << endl; vec_five[1] = 17; ÷ÀÚ ¿¬»êÀÚ¸¦ ´ë½ÅÇؼ­, ¸â¹öÇÔ¼ö at()À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ÷ÀÚ ¿¬»êÀÚ¿Í µ¿ÀÏÇÑ ÀÎÀÚ¸¦ °¡Áö°í µ¿ÀÏÇÑ °ªÀ» ¹ÝȯÇÑ´Ù. front() ¸â¹ö ÇÔ¼ö´Â vectorÀÇ ¸Ç ¾Õ¿¡ ÀÖ´Â ¿ø¼Ò¸¦ ¹ÝȯÇÏ°í, back()Àº ¸Ç ¸¶Áö¸· ¿ø¼Ò¸¦ ¹ÝȯÇÑ´Ù. ÀÌ µÎ ÇÔ¼ö ¸ðµÎ »ó¼ö vector¿¡ Àû¿ëÇϸé, »ó¼ö ·¹ÆÛ·±½º¸¦ ¹ÝȯÇÑ´Ù. cout << vec_five.front() << " ... " << vec_five.back() << endl; 5.2.4 È®Àå ¿¬»ê°ú »çÀÌÁî º¯È¯ ¿¬»ê ÀϹÝÀûÀ¸·Î vector¿¡´Â ¼¼°¡ÁöÀÇ ¼­·Î ´Ù¸¥ '»çÀÌÁî'°¡ Á¸ÀçÇÑ´Ù. ù°·Î, ÇöÀç vector°¡ °¡Áö°í ÀÖ´Â ¿ø¼ÒÀÇ °¹¼öÀÌ´Ù. µÑ°·Î »õ·Î¿î ¸Þ¸ð¸® ÇÒ´ç¾øÀÌ vector°¡ È®ÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë »çÀÌÁîÀÌ´Ù. ¼¼Â°´Â vector°¡ °¡Áú ¼ö ÀÖ´Â »çÀÌÁîÀÇ »óÇѼ±ÀÌ´Ù. ÀÌµé ¼¼°ªµéÀº °¢°¢ size(), capacity(), max_size() ¸â¹öÇÔ¼ö¿¡ ÀÇÇØ ¾òÀ» ¼ö ÀÖ´Ù. cout << "size: " << vec_five.size() << endl; cout << "capacity: " << vec_five.capacity() << endl; cout << "max_size: " << vec_five.max_size() << endl; max_size()´Â »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®ÀÇ ¾ç ¶Ç´Â size_type ÀÚ·áÇüÀÌ ³ªÅ¸³¾ ¼ö ÀÖ´Â ÃÖ´ë°ª¿¡ ÀÇÇØ Á¦ÇѵȴÙ. ÇöÀç »çÀÌÁî¿Í capacity¸¦ ±Ô¸íÇϱⰡ ´õ ¾î·Æ´Ù. ´ÙÀ½ Àý¿¡¼­ »ìÆ캸°ÚÁö¸¸, ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î vector·ÎºÎÅÍ ¿ø¼ÒµéÀ» Ãß°¡Çϰųª »èÁ¦ÇÒ ¼ö ÀÖ´Ù. vector·ÎºÎÅÍ ¿ø¼ÒµéÀ» Á¦°ÅÇÒ ¶§, vector¿¡ ´ëÇÑ ¸Þ¸ð¸®´Â ¹ÝȯµÇÁö ¾ÊÀ¸¸ç, µû¶ó¼­, size´Â Áپ capacity´Â ±×´ë·ÎÀÌ´Ù. ±âÁ¸¿¡ È®º¸µÈ capacity¸¦ ³ÑÁö ¾ÊÀ¸¸é, »ðÀÔÀ¸·Î ÀÎÇØ »õ·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏÁö´Â ¾Ê´Â´Ù. [Image] Memory Management »ðÀÔÀ¸·Î ÀÎÇØ capacity°¡ ³ÑÄ¡°Ô µÇ¸é, vector ¿ø¼ÒµéÀ» ´ãÀ» »õ·Î¿î ºí·°À» ÇÒ´çÇÏ°Ô µÈ´Ù. ±×¸®°í ³ª¼­, ¿ø¼Ò ŸÀÔ¿¡ ´ëÇÑ ´ëÀÔ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© °ªµéÀ» »õ·Î ÇÒ´çµÈ ¸Þ¸ð¸®·Î º¹»çÇÏ°í, ¿¹Àü ¸Þ¸ð¸®´Â »èÁ¦ÇÑ´Ù. ÀÌ´Â »ó´çÈ÷ ºñ½Ñ ¿¬»êÀ̹ǷÎ, vector µ¥ÀÌÅÍ Å¸ÀÔÀº ÇÁ·Î±×·¡¸Ó¿¡°Ô vectorÀÇ capacity¸¦ Á¤ÇÒ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. reserve() ¸â¹ö ÇÔ¼ö´Â vector°¡ Àû¾îµµ ÁÖ¾îÁø »çÀÌÁî±îÁö´Â ÀÚ¶ó³¯ °ÍÀ̶ó´Â °ÍÀ» ³ªÅ¸³»´Â vector¿¡ ´ëÇÑ Áö½ÃÀÚÀÌ´Ù. reserve() ÀÎÀÚ·Î ÁÖ¾îÁø °ªÀÌ ÇöÀç capacityº¸´Ù Å©¸é, ¸Þ¸ð¸® ¹ÝȯÀÌ ÀϾ°í, ÀÎÀÚ·Î ÁÖ¾îÁø °ªÀÌ »õ·Î¿î capacity°¡ µÈ´Ù. (??) capacity°¡ ÀÌ¹Ì ÀÎÀÚ°ªÀ» ÃÊ°úÇÏ°í ÀÖ´Ù¸é, ¸Þ¸ð¸® ¹ÝȯÀº ÀϾÁö ¾Ê´Â´Ù. reserve()¸¦ È£ÃâÇصµ vectorÀÇ »çÀÌÁî¿Í ¿ø¼Ò°ªµéÀº ¹Ù²îÁö ¾Ê´Â´Ù.(´Ü, ¸Þ¸ð¸® ¹ÝȯÀÌ ÀϾ¸é ¿ø¼Ò°ªµéÀ» À̵¿ÇÏ´Â °æ¿ì´Â Á¦¿ÜÇÑ´Ù.) vec_five.reserve(20); ¸Þ¸ð¸® ¹ÝȯÀÌ ÀϾ¸é, vectorµéÀÇ ¿ø¼Ò¸¦ ÂüÁ¶ÇÏ´Â ¸ðµç ·¹ÆÛ·±½º, Æ÷ÀÎÅÍ, ¹Ýº¹ÀÚµéÀº ¸ðµÎ ¹«È¿°¡ µÈ´Ù. empty() ¸â¹ö ÇÔ¼ö´Â ÇöÀç vectorÀÇ »çÀÌÁî°¡ 0ÀÏ ¶§ ÂüÀÌ µÈ´Ù. (vectorÀÇ capacity¿Í´Â ¹«°üÇÏ´Ù.) ÀÌÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ size()ÀÇ ¸®ÅÏ°ª°ú 0À» ºñ±³ÇÏ´Â °Íº¸´Ù ÈξÀ È¿°úÀûÀÌ´Ù. cout << "empty is " << vec_five.empty() << endl; resize() ¸â¹ö ÇÔ¼ö´Â vectorÀÇ »çÀÌÁ ÀÎÀÚ°ªÀ¸·Î ¸¸µé¾î¹ö¸°´Ù. À̶§ ÇÊ¿äÇÏ´Ù¸é vectorÀÇ ³¡ºÎºÐÀÇ ¿ø¼Ò°ªµéÀÌ »èÁ¦µÇ°Å³ª ÷°¡µÈ´Ù. ¿É¼ÇÀÎ µÎ¹ø° ÀÎÀÚ´Â »õ·Î¿î ¿ø¼Ò°¡ Ãß°¡µÉ ¶§ÀÇ ÃʱⰪµé·Î »ç¿ëµÈ´Ù. ¸¸¾à ¿ø¼Ò ŸÀÔ¿¡ ´ëÇÑ ¼Ò¸êÀÚ°¡ Á¤ÀǵǾî ÀÖ´Ù¸é, ÄÝ·º¼ÇÀ¸·ÎºÎÅÍ Á¦°ÅµÇ´Â ¿ø¼Ò°ªµé¿¡ ´ëÇØ ¼Ò¸êÀÚ°¡ È£ÃâµÈ´Ù. // become size 12, adding values of 17 if necessary vec_five.resize (12, 17); 5.2.5 ¿ø¼ÒÀÇ »ðÀÔ°ú »èÁ¦ ¾Õ¿¡¼­ ¾ð±ÞÇß´ø ¹Ù¿Í °°ÀÌ, vector Ŭ·¡½º´Â »çÀÌÁî°¡ Áõ°¡Çϰųª °¨¼ÒÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ÀÏ¹Ý ¹è¿­°ú ´Ù¸£´Ù. »ðÀÔÀ¸·Î ÀÎÇØ vectorÀÇ ¿ø¼ÒÀÇ ¼ö°¡ ÇöÀç ¿ø¼Ò°ªµéÀ» ´ã´Âµ¥ »ç¿ëµÇ´Â ¸Þ¸ð¸® ºí·°ÀÇ capacity¸¦ ÃÊ°úÇÏ°Ô µÇ¸é, »õ·Î¿î ¸Þ¸ð¸® ºí·°ÀÌ ÇÒ´çµÇ¾î ÀÌ°÷À¸·Î ¿ø¼Ò°ªµéÀ» º¹»çÇÑ´Ù. [Image] Costly Insertions push_back()À» »ç¿ëÇϸé vectorÀÇ ³¡¿¡ »õ ¿ø¼Ò¸¦ ÷°¡ÇÒ ¼ö ÀÖ´Ù. ÇöÀç ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ °ø°£ÀÌ ³²¾Æ ÀÖ´Ù¸é, ÀÌ ¿¬»êÀº ¸Å¿ì È¿À²ÀûÀÌ´Ù(»ó¼ö½Ã°£). vec_five.push_back(21); // add element 21 to end of collection ÀÌ¿¡ ´ëÀÀµÇ´Â »èÁ¦ ¿¬»êÀ¸·Î pop_back()ÀÌ ÀÖ´Ù. ÀÌ ¿¬»êÀº vectorÀÇ »çÀÌÁ ÁÙÀÌ°í, capacity¿¡´Â º¯È­¸¦ ÁÖÁö ¾Ê´Â´Ù. ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀÌ ¼Ò¸êÀÚ¸¦ Á¤ÀÇÇÏ°í ÀÖ´Ù¸é, »èÁ¦µÇ´Â ¿ø¼Ò¿¡ ´ëÇØ ¼Ò¸êÀÚ¸¦ È£ÃâÇÏ°Ô µÈ´Ù. pop_back() ¿¬»êµµ ¸Å¿ì È¿À²ÀûÀÌ´Ù. (deque Ŭ·¡½º´Â ÄÝ·º¼ÇÀÇ ¾Õ°ú µÚ¿¡¼­ »ðÀÔ°ú »èÁ¦¸¦ Çã¿ëÇÑ´Ù.) À̵é ÇÔ¼öµéÀº deque¸¦ ÀÚ¼¼È÷ ¼³¸íÇÏ°í ÀÖ´Â 7Àå¿¡¼­ ¼³¸íÇÑ´Ù. insert() ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇϸé Á»´õ ÀϹÝÀûÀÎ »ðÀÔ ¿¬»êÀ» ÇàÇÒ ¼ö ÀÖ´Ù. »ðÀÔÇÒ À§Ä¡´Â ¹Ýº¹ÀÚ·Î ÁöÁ¤ÇÏ°í, »ðÀÔÀº ¸í½ÃµÈ À§Ä¡ÀÇ ¹Ù·Î ¾Õ¿¡¼­ ÀϾ´Ù. Á¤ÇØÁø °¹¼öÀÇ »ó¼ö ¿ø¼ÒµéÀº ´Ü ÇѹøÀÇ ÇÔ¼ö È£Ãâ·Î »ðÀ﵃ ¼ö ÀÖ´Ù. ÇѹøÀÇ È£Ãâ·Î ÇÑºí·°ÀÇ ¿ø¼ÒµéÀ» »ðÀÔÇÏ´Â °ÍÀº Çϳª¾¿ »ðÀÔÇÏ´Â °Íº¸´Ù ÈξÀ È¿À²ÀûÀÌ´Ù. ÇѹøÀÇ È£Ãâ·Î ±â²¯ÇØ¾ß ÇѹøÀÇ ÇҴ縸 ¼öÇàÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù. // find the location of the 7 vector::iterator where = find(vec_five.begin(), vec_five.end(), 7); vec_five.insert(where, 12); // then insert the 12 before the 7 vec_five.insert(where, 6, 14); // insert six copies of 14 vec_five.insert(where, vec_three.begin(), vec_three.end()); [Image] Iterator Invalidation vectorÀÇ ¸¶Áö¸· ¿ø¼Ò¸¦ »èÁ¦ÇÏ´Â pop_back() ¸â¹ö ÇÔ¼ö»Ó¸¸ ¾Æ´Ï¶ó, À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇÏ¿© vectorÀÇ Áß°£¿¡¼­ ¿ø¼ÒµéÀ» »èÁ¦ÇÏ´Â ÇÔ¼öµéµµ ÀÖ´Ù. erase()°¡ ¹Ù·Î ±× ÇÔ¼öÀÌ´Ù. µÎ°¡Áö ÇüÅ°¡ Àִµ¥, ù°´Â ÇÑ°³ÀÇ ¹Ýº¹ÀÚ¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ÇÑ°³ÀÇ ¿ø¼Ò°ªÀ» Á¦°ÅÇÏ°í, µÑ°´Â ÇѽÖÀÇ ¹Ýº¹ÀÚ¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ÀÌ ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â ¹üÀ§³»ÀÇ ¸ðµç °ªµéÀ» »èÁ¦ÇÑ´Ù. vectorÀÇ »çÀÌÁî´Â ÁÙ¾îµé°í, capacity´Â ÁÙ¾îµéÁö ¾Ê´Â´Ù. ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀÌ ¼Ò¸êÀÚ¸¦ Á¤ÀÇÇÏ°í ÀÖ´Ù¸é, »èÁ¦µÇ´Â °ª¿¡ ´ëÇØ ¼Ò¸êÀÚ¸¦ È£ÃâÇÑ´Ù. vec_five.erase(where); // erase from the 12 to the end where = find(vec_five.begin(), vec_five.end(), 12); vec_five.erase(where, vec_five.end()); 5.2.6 ¹Ýº¹ÀÚ begin()°ú end() ¸â¹ö ÇÔ¼ö´Â ÄÁÅ×À̳ʿ¡ ´ëÇÑ ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ÀÌµé ¿¬»êµéÀÌ ¹ÝȯÇÏ´Â ¹Ýº¹Àڵ鵵 ¿ø¼Ò¸¦ »ðÀÔÇϰųª »èÁ¦ÇÑ µÚ¿¡ ¹«È¿°¡ µÉ ¼ö ÀÖ´Ù. rbegin()°ú rend() ¸â¹ö ÇÔ¼ö´Â ¾Õ°ú ºñ½ÁÇÑ ¹Ýº¹ÀÚ¸¦ ¹ÝȯÇÏÁö¸¸, ÀÌµé ¹Ýº¹ÀÚ´Â ¹Ý´ë¹æÇâÀ¸·Î ¿ø¼ÒµéÀ» Á¢±ÙÇÑ´Ù. ¸¸¾à ÄÁÅ×À̳ʰ¡ »ó¼ö·Î ¼±¾ðµÇ¾î Àִٰųª, ´ëÀÔ ¿¬»êÀÚÀÇ ´ë»óÀ̳ª ÀÎÀÚ°¡ »ó¼ö¶ó¸é, ÀÌµé ¿¬»êµéÀº »ó¼ö ¹Ýº¹ÀÚµéÀ» ¹ÝȯÇÒ °ÍÀÌ´Ù. 5.2.7 ¼Ò¼Ó °Ë»ç ¿¬»ê vector´Â ÀÚ½ÅÀÌ Æ¯Á¤°ªÀ» Æ÷ÇÔÇÏ°í ÀÖ´ÂÁö¸¦ °áÁ¤Çϴµ¥ »ç¿ëµÇ´Â ¿¬»êÀ» Á÷Á¢ Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª, find()³ª count()(13.3.1Àý°ú 13.6.1Àý) generic ¾Ë°í¸®µëµéÀÌ ÀÌ·¯ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸í·É¹®µéÀº Á¤¼ö vector°¡ 17À̶ó´Â ¼ö¸¦ Æ÷ÇÔÇÏ°í ÀÖ´ÂÁö¸¦ °Ë»çÇÏ°í ÀÖ´Ù. int num = 0; count (vec_five.begin(), vec_five.end(), 17, num); if (num) cout << "contains a 17" << endl; else cout << "does not contain a 17" << endl; [Image] Initializing Count 5.2.8 Á¤·Ä ¿¬»ê vector´Â ÀÚ½ÅÀÌ °ü¸®ÇÏ´Â ¿ø¼ÒµéÀ» ÀÚµ¿À¸·Î ¼ø¼­¸¦ À¯Áö½ÃÅ°Áö ¾Ê´Â´Ù. ±×·¯³ª, sort() generic algorithmÀ» »ç¿ëÇÏ¿© vector³»ÀÇ ¿ø¼ÒµéÀ» ¼ø¼­´ë·Î ³ª¿­ÇÒ ¼ö ÀÖ´Ù. °¡Àå °£´ÜÇÑ ÇüÅÂÀÇ Á¤·ÄÀº ºñ±³ÇÒ ¶§ ¿ø¼ÒŸÀÔ¿¡ ´ëÇØ less-than ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. ¶Ç´Ù¸¥ generic ¾Ë°í¸®µëÀº ÇÁ·Î±×·¡¸Ó°¡ ¸í½ÃÀûÀ¸·Î ºñ±³ ¿¬»êÀÚ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í ÀÖ´Ù. ¿¡¸¦ µé¾î, ´ÙÀ½Àº ¿À¸§Â÷¼øÀÌ ¾Æ´Ñ ³»¸²Â÷¼øÀ¸·Î ¿ø¼ÒµéÀ» ¹èÄ¡ÇÏ°í ÀÖ´Ù. // sort ascending sort(aVec.begin(), aVec.end()); // sort descending, specifying the ordering function explicitly sort(aVec.begin(), aVec.end(), greater() ); // alternate way to sort descending sort(aVec.rbegin(), aVec.rend()); 14Àå¿¡¼­ ¼³¸íÇÏ°í ÀÖ´Â ¸¹Àº ¿¬»êµéÀÌ ordered ÄÝ·º¼ÇÀ» ´ã°í ÀÖ´Â vectorµé¿¡ Àû¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, µÎ°³ÀÇ vector°¡ merge() generic ¾Ë°í¸®µëÀ» »ç¿ëÇÏ¿© ÇÕÃÄÁú ¼ö ÀÖ´Ù. (14.6Àý) // merge two vectors, printing output merge(vecOne.begin(), vecOne.end(), vecTwo.begin(), vecTwo.end(), ostream_iterator(cout, " ")); vector¸¦ Á¤·ÄÇÒ ¶§´Â find()¿Í °°ÀÌ ¼±Çü ¼øȸ ¾Ë°í¸®µë ´ë½Å¿¡ º¸´Ù È¿°úÀûÀÎ ÀÌÁø °Ë»ö ¾Ë°í¸®µëÀ» »ç¿ëÇÑ´Ù.(?) 5.2.9 À¯¿ëÇÑ generic ¾Ë°í¸®µëµé 13Àå¿¡¼­ ¼³¸íÇÏ´Â ´ëºÎºÐÀÇ ¾Ë°í¸®µëµéÀÌ vector¿Í °°ÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ Ç¥´Â À̵éÁß¿¡¼­ º¸´Ù À¯¿ëÇѰ͵鸸À» ¸ð¾Æ³õÀº °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, vector¿¡¼­ÀÇ ÃÖ´ë°ªÀº ´ÙÀ½°ú °°ÀÌ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. vector::iterator where = max_element (vec_five.begin(), vec_five.end()); cout << "maximum is " << *where << endl; ¿ëµµ À̸§ ÁÖ¾îÁø ÃʱⰪÀ¸·Î º¤Å͸¦ ä¿î´Ù. fill ¼ö¿­À» º¹»çÇÑ´Ù. copy ¹ß»ý±â(generator)°¡ »ý¼ºÇÑ °ªÀ» º¤ÅÍ¿¡ generate Áý¾î³Ö´Â´Ù. Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿ø¼Ò¸¦ ã´Â´Ù. find ¿¬¼ÓÀûÀ¸·Î Áߺ¹µÈ ¿ø¼Ò¸¦ ã´Â´Ù. adjacent_find º¤Åͳ»¿¡¼­ ¼­ºê ½ÃÄö½º¸¦ ã´Â´Ù. search ÃÖ´ë ¶Ç´Â ÃÖ¼Ò ¿ø¼Ò¸¦ ã´Â´Ù. max_element, min_element ¿ø¼ÒÀÇ ¼ø¼­¸¦ µÚÁý´Â´Ù. reverse ¿ø¼ÒµéÀ» »õ·Î¿î °ªµé·Î ´ëÄ¡ÇÑ´Ù. replace °¡¿îµ¥Á¡À» Áß½ÉÀ¸·Î ¿ø¼ÒµéÀ» ¼øȯ½ÃŲ´Ù. rotate ¿ø¼ÒµéÀ» µÎ±×·ìÀ¸·Î ÂÉ°µ´Ù. partition ¼ø¿­(permutation)À» »ý¼ºÇÑ´Ù. next_permutation º¤Åͳ»¿¡¼­ÀÇ ... inplace_merge º¤Åͳ»ÀÇ ¿ø¼ÒµéÀ» ÀÓÀÇ·Î ¼¯´Â´Ù. random_shuffle Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿ø¼ÒµéÀÇ °¹¼ö¸¦ ¼¾´Ù. count º¤ÅͷκÎÅÍÀÇ Á¤º¸¸¦ °¡Áö°í ÇϳªÀÇ °ªÀ» ¸¸µé¾î accumulate ³½´Ù. µÎ º¤ÅÍÀÇ ³»ÀûÀ» ±¸ÇÑ´Ù. inner_product µÎº¤Å͸¦ Çѽ־¿ ºñ±³ÇÏ¿© °°ÀºÁö¸¦ °Ë»çÇÑ´Ù. equal »çÀü½Ä ºñ±³ lexicographical_compare º¤ÅÍ¿¡ º¯È¯À» Àû¿ëÇÑ´Ù. transform °ªµéÀÇ ºÎºÐÇÕÀ» ±¸ÇÑ´Ù. partial_sum ÀÌ¿ôÇÏ´Â °ªµéÀÇ Â÷¸¦ ±¸ÇÑ´Ù. adjacent_difference °¢ ¿ø¼Òµé¿¡ ´ëÇØ ÇÔ¼ö¸¦ ¼öÇàÇÑ´Ù. for_each 5.3 ºÎ¿ï º¤ÅÍ ºñÆ®°ªµéÀÇ º¤Åʹ ǥÁØ ¶óÀ̺귯¸®¿¡¼­´Â Ưº°ÇÑ °æ¿ì·Î Ãë±ÞÇÏ¿©, °ªµéÀÌ È¿°úÀûÀ¸·Î packµÉ ¼ö ÀÖ´Ù. ºÎ¿ï º¤ÅÍ, vectorÀ» À§ÇÑ ¿¬»êµéÀº ÀÏ¹Ý º¤ÅÍ ¿¬»êÀÇ supersetÀÌ°í, ´ÜÁö ±¸ÇöÀÌ ´õ È¿À²ÀûÀÌ´Ù. ºÎ¿ï º¤ÅÍ¿¡ Ãß°¡µÇ´Â ¸â¹ö ÇÔ¼ö´Â flip()ÀÌ´Ù. È£ÃâµÇ¾úÀ» ¶§, ÀÌ ÇÔ¼ö´Â º¤ÅÍÀÇ ¸ðµç ºñÆ®¸¦ µÚÁý´Â´Ù. ¶ÇÇÑ ºÎ¿ï º¤ÅÍ´Â ³»ºÎ°ªÀ» ·¹ÆÛ·±½º·Î ¸®ÅÏÇϸç, ÀÌ ·¹ÆÛ·±½º¿¡ ´ëÇؼ­µµ flip() ¸â¹ö ÇÔ¼ö¸¦ Áö¿øÇÑ´Ù. ¾Æ·¡ ÄÚµåÀÇ ¼¼¹ø° ÁÙÀÌ À̸¦ ¼³¸íÇÏ°í ÀÖ´Ù. vector bvec(27); bvec.flip(); // flip all values bvec[17].flip(); // flip bit 17 vectorÀº Ãß°¡ÀûÀ¸·Î swap() ¸â¹ö ÇÔ¼ö¸¦ Áö¿øÇϴµ¥, ÀÌ ÇÔ¼ö´Â ÇѽÖÀÇ ·¹ÆÛ·±½º°¡ °¡¸®Å°´Â °ªµéÀ» ¼­·Î ¹Ù²Û´Ù. bvec.swap(bvec[17], bvec[16]); 5.4 ¿¹Á¦ ÇÁ·Î±×·¥ - ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼ An example program that illustrates the use of vectors is the classic algorithm, called the sieve of Eratosthenes, used to discover prime numbers. A list of all the numbers up to some bound is represented by an integer vector. The basic idea is to strike out (set to zero) all those values that cannot be primes; thus all the remaining values will be the prime numbers. To do this, a loop examines each value in turn, and for those that are set to one (and thus have not yet been excluded from the set of candidate primes) strikes out all multiples of the number. When the outermost loop is finished, all remaining prime values have been discovered. The program is as follows: void main() { // create a sieve of integers, initially set const int sievesize = 100; vector sieve(sievesize, 1); // now search for 1 bit positions for (int i = 2; i * i < sievesize; i++) if (sieve[i]) for (int j = i + i; j < sievesize; j += i) sieve[j] = 0; // finally, output the values that are set for (int j = 2; j < sievesize; j++) if (sieve[j]) cout << j << " "; cout << endl; }