ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>STL_iterator
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
1절. Iterator1.1절. Iterator À̶õ¿ì¸®³ª¶ó ¸»·Î Çϸé "¹Ýº¹ÀÚ", "¼øÈ¯ÀÚ" Á¤µµ°¡ µÉ°ÍÀÌ´Ù. ±×·±µ¥ ±»ÀÌ ¹ø¿ªµÈ ¸»¿¡ ½Å°æ¾µÇÊ¿ä ¾øÀÌ C¿¡¼ »ç¿ëµÇ´Â Æ÷ÀÎÅÍ ¶ó°í »ý°¢ÇÏ´Â°Ô °¡Àå ÀÌÇØÇϱ⠽¬¿ïµíÇÏ´Ù. ´Ù¸¥¸»·Î pointer ¸¦ °´Ã¼µî¿¡ À¯¿¬ÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖµµ·Ï ÀϹÝÈ ½ÃŲ ¹öÁ¯ À̶ó°í ÇÒ¼ö ÀÖ´Ù. Æ÷ÀÎÅÍ¿Í ¸¶Âù°¡Áö·Î iterator ¸¦ Áõ°¡½ÃŰ°Å³ª °¨¼Ò ½ÃÅ´À¸·Î½á °´Ã¼°£À» À̵¿ÇÒ¼ö ÀÖ´Ù. iterator ´Â ÀÚ·áÇü¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖÀ¸¸ç, ÀÌ·¯ÇÑ Á¤º¸¿¡ ¾î¶»°Ô Á¢±ÙÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. Æ÷ÀÎÅͰ¡ ÀÚ·á¿¡ Á¢±ÙÇϱâ À§Çؼ ÁÖ¼ÒÁ¤º¸¸¦ °¡Áö°í Àִ°Ͱú ºñ½ÁÇѵ¥, iterator ´Â °´Ã¼¿¡ Á¢±ÙÇϱâÀ§ÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â ¶Ç´Ù¸¥ °´Ã¼ÀÌ´Ù. iterator ´Â ÀϹÝÈ(generic) ÇÁ·Î±×·¡¹ÖÀ» Çϴµ¥ ÀÖ¾î¼ °¡Àå ÇÙ½ÉÀÌ µÇ´Â ¿ä¼ÒÁß Çϳª·Î½á, ÄÁÅ×ÀÌ³Ê¿Í ¾Ë°í¸®Áò »çÀÌ¿¡¼ ¼·Î¸¦ ¿¬°á ½ÃÄÑÁÖ´Â ÀÎÅÍÆäÀ̽º(°¡±³) ¿ªÈ°À» ÇÑ´Ù(º¸Åë ¾Ë°í¸®ÁòÀº iterator ¸¦ ¾Æ±Ô¸ÕÆ®·Î ¹Þ¾ÆµéÀδÙ). ÀÌ·¸µí ¾Ë°í¸®ÁòµéÀÌ iterator ¸¦ ¹Þ¾Æ µéÀÓÀ¸·Î½á ¸¹Àº Á¾·ùÀÇ ´Ù¸¥ ÄÁÅ×À̳ʵéÀ» »ç¿ëÇÒ¼ö(Àû¿ë½Ãų¼ö) ÀÖ°Ô µÈ´Ù. ¿¹¸¦µé¾î ¾î¶² ÄÁÅ×À̳ʿ¡ sort ¾Ë°í¸®ÁòÀ» Àû¿ë½ÃŰ±â ¿øÇÑ ´Ù¸é ÄÁÅ×ÀÌ³Ê °´Ã¼¸¦ ³Ö´Â´ë½Å¿¡, sort ÇÏ°í ½ÍÀº ¹üÀ§¸¦ iterator ¸¦ ÅëÇØ ÁöÁ¤ÇÒ¼ö ÀÖÀ½À¸·Î(º¸ÅëÀº óÀ½°ú ³¡, Áï Àüü°¡ µÇ°ÚÁö¸¸) Á»´õ À¯¿¬ÇÏ°Ô ÇÁ·Î±×·¡¹Ö ÀÛ¾÷ÀÌ °¡´ÉÇÒ°ÍÀÌ´Ù. ÀÌ·¸µí iterator ÀÇ °³³ä ÀÚü´Â °£´ÜÇÏÁö¸¸, iterator ¿¡µµ ¿©·¯°¡Áö Á¾·ù°¡ ÀÖ´Ù. Input Iterator, Output Iterator, Forward Iterator, Bidirectional Iterator, Random Access Iterator µîÀÌ ÀÖ´Ù. Çä ¹¹°¡ À̸® Á¾·ù°¡ ¸¹Áö? ¶ó°í °ÆÁ¤ÇÒ¼ö µµ ÀÖ°ÚÁö¸¸, ±×¸® °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±×³É »ó½ÄÀû? À¸·Î »ý°¢ÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù. ´ÙÀ½Àå¿¡¼´Â ÀÌ·¯ÇÑ Iterator ÀÇ Á¾·ù¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇÒ°ÍÀÌ´Ù. 1.2절. Output IteratorÃâ·Â ¹Ýº¹ÀÚ¶ó°í ºÎ¸¦¼ö ÀÖÀ¸¸ç, ¾²±â Àü¿ëÀÇ ¹Ýº¹ÀÚÀÌ´Ù. Áï ¾î¶² ÄÁÅ×À̳ʿ¡ ¿ø¼Ò¸¦ ¾²´Â°Ç °¡´ÉÇÏÁö¸¸ ÀÐÀ»¼ö´Â ¾ø´Â Á¾·ùÀÇ iterator µéÀÌ´Ù. À̵é ÀÌÅÍ·¹ÀÌÅÍ¿¡´Â ++ ¿¬»êÀÌ °¡´ÉÇÏ(. 1.2.1절. ostream_iterator<T>Output Iterator ÀÇ °¡Àå ´ëÇ¥ÀûÀÎ iterator class ÀÌ´Ù. Ãâ·Â½ºÆ®¸²¿¡ ¾²´ÂÀÏÀ» ÇÑ´Ù.
¸¸¾à À§ÀÇ Äڵ带 copy(V.begin(), V.end(), V2.begin()); À¸·Î ¹Ù²Ù¸é ¾î¶»°Ô µÉ±î ? ÄÄÆÄÀÏÀº ¹®Á¦¾øÀÌ µÇÁö¸¸ ½ÇÇà½Ã ¹®Á¦°¡(¾Æ¸¶µµ ¼¼±×¸àÅ×ÀÌ¼Ç ¿À·ù) »ý±â¸é¼ ½ÇÇàÀÌ Áß´ÜµÉ °ÍÀÌ´Ù. V2.begin()ÀÌ ³Ñ°ÜÁÖ´Â iterator ´Â ¾î¶°ÇÑ ¿ëµµ·Îµµ »ç¿ë°¡´ÉÇÏÁö¸¸, V2 ÄÁÅ×À̳ÊÀÇ »çÀÌÁî°¡ ÀÚµ¿ÀûÀ¸·Î ÇÒ´çµÇ¾î ÀÖÁö ¾Ê´Ù´Â°Ô ¹®Á¦°¡ µÇ±â ¶§¹®ÀÌ´Ù. copy ¾Ë°í¸®ÁòÀº ÄÁÅ×À̳ÊÀÇ °ø°£À» ÀÚµ¿À¸·Î ÇÒ´çÇØÁÖ´Â ±â´ÉÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. ¹°·Ð À̹®Á¦´Â ÄÁÅ×À̳ÊÀÇ Å©±â¸¦ ÀÚµ¿À¸·Î ´Ã·ÁÁÖ´Â ´Ù¸¥ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ÇØ°á°¡´ÉÇÏ´Ù. ÀÌ °ÍÀº ÀÌ ´ÙÀ½Àå¿¡¼ °£´ÜÇÏ°Ô ´Ù·ç°Ô µÉ°ÍÀÌ´Ù. copy ´Â STL ¿¡¼ Á¦°øÇÏ´Â Algorithms ÀÇ Çϳª·Î iterator ·Î ÁÖ¾îÁø ÀÏÁ¤ÇÑ ¹üÀ§ÀÇ ¿ä¼ÒµéÀ» Ä«ÇÇÇϱâ À§Çؼ »ç¿ëµÈ´Ù. Ä«ÇÇ´Â ¾²±â(Output) ÇàÀ§ À̹ǷΠOutput iterator À» »ç¿ëÇØ¾ß¸¸ ÇÒ°ÍÀÌ´Ù. ±×·¡¼ ¸¶Áö¸· ÀÎÀÚ°¡ Output iterator ÀÎ ostream_iterator ÀÌ ¾²¿´´Ù. ¾ÕÀ¸·Î´Â copy ¾Ë°í¸®ÁòÀ» ÅëÇØ¼ iterator Ŭ·¡½º¸¦ ¼³¸íÇÒ°ÍÀÌ´Ù. copy ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
1.2.2절. front_insert_iterator<FrontInsertionSequence>À§ÀÇ ostream_iterator Àº ½ºÆ®¸² ¾²±â¿ëµµµµ·Î »ç¿ëµÇ´Â Á» ƯÀÌÇÑ °æ¿ì¶ó°í ÇÒ¼ö ÀÖ´Ù. ¿©±â¿¡ front_insert_iterator À̶ó´Â Á»´õ STL ´Ù¿î, ¾²±âÀü¿ë iterator °¡ ÀÖ´Ù. À̸§¿¡¼ ¾Ë¼ö ÀÖµíÀÌ ÀÌ iterator Àº ÄÁÅ×À̳ÊÀÇ °¡Àå ¾ÕºÎºÐ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϰíÀÚ ÇÒ¶§ »ç¿ëÇÒ¼ö ÀÖ´Ù.
À§ÀÇ ÄÚµå´Â list ¸¦ »ç¿ëÇߴµ¥, list ´ë½Å deque ¸¦ ±×´ë·Î »ç¿ëÇØµµ ¹®Á¦ ¾øÀÌ ½ÇÇàµÈ´Ù. ±×·¯³ª vector À» »ç¿ëÇÒ°æ¿ì¿¡´Â ¹®Á¦°¡ µÈ´Ù. ¿Ö³ÄÇϸé list ¿Í deque °°Àº °æ¿ì¿¡´Â ÄÁÅ×À̳ÊÀÇ °¡Àå ¾Õ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϱâ À§ÇÑ push_front() ÇÔ¼ö¸¦ Áö¿øÇÏÁö¸¸, vector Àº Áö¿øÀÌ ¾ÈµÇ±â ¶§¹®ÀÌ´Ù. ÀÌÀ¯´Â ¾Ë°ÚÁö¸¸, vector ÄÁÅ×ÀÌ³Ê ¾Õ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϴ°ÍÀº ³Ê¹« ºñÈ¿À²ÀûÀ̱⠶§¹®ÀÌ´Ù. 1.2.3절. back_insert_iterator<BackInsertionSequence>À§ÀÇ fornt_insert_iterator °ú´Â ¹Ý´ë·Î ÄÁÅ×À̳ÊÀÇ °¡Àå µÚ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϱâ À§Çؼ »ç¿ëÇÑ´Ù.
À§ÀÇ list ´Â deque ·Î ´ë½Å »ç¿ëÇÒ¼öµµ ÀÖ´Ù. ¶ÇÇÑ front_insert_iterator °ú´Â ´Þ¸® vector ¿¡µµ Àû¿ë°¡´ÉÇÏ´Ù. µÚ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϴ°Ŷó¸é vector µµ È¿À²ÀûÀ¸·Î ¼öÇàÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. 1.2.4절. insert_iterator<Container>insert_iterator ´Â ´Ù¸¥ ÄÁÅ×À̳ʿ¡ Output Iterator ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇØÁÖ±â À§ÇÑ iterator adaptor ·Î »ç¿ëµÈ´Ù.
1.3절. Input IteratorÀԷ¹ݺ¹ÀÚ¶ó°í ºÒ¸®¿ì¸ç, ÀбâÀü¿ëÀÇ ¹Ýº¹ÀÚÀÌ´Ù. Output Iterator °ú Á¤¹Ý´ëÀÇ Iterator ÀÌ´Ù. ¸¶Âù°¡Áö·Î ++ ¿¬»êÀ» ÅëÇØ¼ ÇÑÂʹæÇâÀ¸·Î ¼øÈ¯ÀÌ °¡´ÉÇϵµ·Ï µÇ¾î ÀÖ´Ù. 1.3.1절. istream_iterator<T>ÀԷ¹ݺ¹ÀÚÀÇ °¡Àå ´ëÇ¥ÀûÀÎ iterator class ÀÌ´Ù. ½ºÆ®¸³¿¡ ÀÔ·ÂµÈ °ªÀ» Àд ÀÏÀ»ÇÑ´Ù. À§¿¡ ostream_iterator À» ÀÌ¿ëÇØ¼ ȸ鿡 Ãâ·Â½ÃÄ×´ø ÇÁ·Î±×·¥À» Űº¸µå·Î ºÎÅÍ ÀԷ¹޴ ÇÁ·Î±×·¥À¸·Î º¯°æÇغ¸ÀÚ.
ÀÌÄڵ带 º¸¸é ¾Ë°ÚÁö¸¸ vector V ¿¡ ¿ø¼Ò¸¦ Áý¾î ³Ö´Â ¹®Á¦¸¦ ÇØ°áÇßÀ½À» ¾Ë¼ö ÀÖ´Ù. ¹Ù·Î back_inserter À̶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ÇØ°áÇߴµ¥, À̰ÍÀº iterator adaptor ÀÌ´Ù. Áï Output Iterator ¸¦ »ç¿ëÇÒ¼ö ÀÖµµ·Ï ÀÎÅÍÆäÀ̽º(°¡±³)¸¦ Á¦°øÇØÁÖ´Â ¿ªÈ°À» ÇÑ´Ù. 1.4절. Forward Iterator¼ø¹æÇ⠹ݺ¹ÀÚÀ̸ç, ÇÑÂʹæÇâÀ¸·Î ÁøÇàÇϸç Àбâ/¾²±â°¡ ¸ðµÎ °¡´ÉÇÑ ÇüÅÂÀÇ Iterator ÀÌ´Ù. ´ÙÁß ÆÐ½º ¾Ë°í¸®ÁòÀ» Àû¿ëÇϱâ À§Çؼ »ç¿ëµÉ¼ö ÀÖ´Ù. forward Iterator ¸¦ »ç¿ëÇÏ´Â ´ëÇ¥ÀûÀÎ ¾Ë°í¸®ÁòÀ¸·Î replace ¶ó´Â ¾Ë°í¸®ÁòÀÌ ÀÖ´Ù.
1.5절. Bidirectional IteratorÁö±Ý±îÁöÀÇ Iterator ´Â ÇѹæÇâÀ¸·Î¸¸ ¼øÈ¯ÀÌ °¡´ÉÇß´Ù. Áï Iterator ¿¡ ´ëÇÑ ++ ¿¬»ê¸¸ °¡´ÉÇß´Ù ¹Ù¸é Bidirectional À̶õ À̸§¿¡¼ ¾Ë¼ö ÀÖµíÀÌ ÀÌ Iterator ´Â ¾ç¹æÇâ ¸ðµÎ·ÎÀÇ ¼øÈ¯ÀÌ °¡´ÉÇÏ´Ù. ±âº»ÀûÀΠƯ¡Àº Forward Iterator °ú °°´Ù. ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ ÇÊ¿ä·Î ÇÏ´Â °¡Àå ´ëÇ¥ÀûÀÎ ¾Ë°í¸®ÁòÀ¸·Î reverse ¾Ë°í¸®ÁòÀÌ ÀÖ´Ù.
1.6절. Random Access IteratorÀ̰ÍÀº Bidirectional Iterator ÀÇ Æ¯Â¡ÀÎ ¾ç¹æÇâ¼øÈ¯ÀÇ Æ¯Â¡¿Ü¿¡µµ ·£´ýÇÏ°Ô ¿ø¼Ò¿¡ Á¢±ÙÇÒ¼ö Àִ Ư¡À» Á¦°øÇÑ´Ù. ´Ù¸¥ Iterator µéÀÌ ÄÁÅ×À̳ʸ¦ ¼øÈ¸Çϱâ À§Çؼ °¢¿ø¼Ò¿¡ Â÷·Ê´ë·Î Á¢±ÙÇß´ø°Í°ú´Â ´Ù¸£´Ù. ¿¹¸¦µé¾î ¾î¶² ÄÁÅ×À̳ʿ¡ ´ëÇØ¼ binary search ¸¦ ¼öÇàÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ, binary serach ÀÇ Æ¯¼º»ó Iterator ´Â ÄÁÅ×À̳ÊÀÇ ÀÓÀÇ ÁöÁ¡¿¡ Á¢±ÙÀÌ °¡´ÉÇØ¾ß search °¡ È¿À²ÀûÀ¸·Î ÀÌ·ç¾îÁú¼ö ÀÖÀ»°ÍÀÌ´Ù.
binary_search ´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.
2절. °á·ÐÀÌ»ó Iterator ÀÇ Á¾·ù¿Í Ư¼º¿¡ ´ëÇØ¼ °£´ÜÈ÷ ¾Ë¾Æº¸¾Ò´Ù. ²Ï È¥µ¿µÉ¼ö Àִµ¥ ±×³É »ó½ÄÀûÀ¸·Î »ý°¢ÇÏ¸é µÈ´Ù. ¿¹¸¦µé¾î vector, deque, list µîÀÇ Sequence container µéÀº ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇϹǷΠ´ç¿¬È÷ Random Access Iterator ¸¦ »ç¿ëÇÒ¼ö ÀÖÀ»°ÍÀ̸ç, ¸¶Âù°¡Áö·Î ÀÌ·¯ÇÑ Iterator ¸¦ »ç¿ëÇÏ´Â ¾Ë°í¸®Áòµéµµ »ç¿ëÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª map, set µî°ú °°Àº association container ¿¡´Â »ç¿ëÇÒ¼ö ¾øÀ»°ÍÀÌ´Ù. Iterator ¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °¡Àå °£´ÜÇÏ°Ô ºÃÀ»¶§ ÄÁÅ×À̳ʿø¼Ò¿¡ Á¢±ÙÇϱâ À§ÇÑ ¿ëµµÀ̸ç, ƯÈ÷ ¾Ë°í¸®ÁòÀ» Àû¿ë½Ã۱â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ±×¸®°í ¾Ë°í¸®Áò¿¡ µû¶ó¼ ¹Þ¾ÆµéÀϼö ÀÖ´Â Iterator ÀÇ Á¾·ù°¡ ´Ù¸¦¼ö ÀÖÀ½À¸·Î °¢ ÄÁÅ×À̳ʰ¡ ¾î¶°ÇÑ Iterator ¸¦ µÇµ¹·ÁÁÙ¼ö ÀÖ´ÂÁö ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ¸Ó ±×·¸´Ù°í °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ´©Â÷ ¸»ÇßµíÀÌ ±×³É »ó½ÄÀûÀ¸·Î »ý°¢ÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù. |
|
|||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|