39-2-´Ù.¼ø¹æÇâ, ¾ç¹æÇ⠹ݺ¹ÀÚ

¼ø¹æÇ⠹ݺ¹ÀÚ(Foward Iterator)´Â ÀÔ·Â Ãâ·ÂÀÌ ¸ðµÎ °¡´ÉÇÑ ¹Ýº¹ÀÚÀÌ´Ù. ÀÔ·Â, Ãâ·Â ¹Ýº¹ÀÚ´Â µÑ Áß Çϳª¸¸ °¡´ÉÇѵ¥ ºñÇØ ¼ø¹æÇ⠹ݺ¹ÀÚ´Â Àбâ, ¾²±â°¡ ¸ðµÎ °¡´ÉÇÏ´Ù. À̸§ÀÌ ÀǹÌÇϵíÀÌ ¼ø¹æÇâÀ¸·Î À̵¿ °¡´ÉÇÏ´Ù´Â Á¶°Çµµ Æ÷ÇԵȴÙ. ¼ø¹æÇâÀ¸·Î À̵¿ °¡´ÉÇÏ´Ù´Â °ÍÀº ++ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÑ´Ù´Â ¶æÀε¥ ÀüÀ§Çü, ÈÄÀ§Çü ¸ðµÎ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ++it, it++ µÎ ÇüŸ¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª -- ¿¬»êÀÚ°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î ¿ª¹æÇâÀ¸·Î´Â À̵¿ÇÒ ¼ö ¾ø´Ù.

ÀÔÃâ·ÂÀ» ´Ù ÇÒ ¼ö ÀÖ´Ù´Â °Í ¿Ü¿¡µµ ¼ø¹æÇ⠹ݺ¹ÀÚ°¡ ÀÔ·Â, Ãâ·Â ¹Ýº¹ÀÚ¿Í ´Ù¸¥ Á¡Àº °°Àº À§Ä¡¸¦ ¿©·¯ ¹ø ÀÐ°í ¾µ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ¹Ýº¹ÀÚ°¡ ÄÁÅ×À̳ʳ»ÀÇ ¿ä¼Ò Çϳª¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ ¿ÜºÎ¿¡¼­ Ưº°ÇÑ Á¶ÀÛÀ» ÇÏÁö ¾ÊÀ¸¸é ÀÌ ¹Ýº¹ÀÚ´Â ±× ¿ä¼Ò¸¦ °è¼Ó °¡¸®Å²´Ù. ±×·¡¼­ ¹Ýº¹ÀÚ¸¦ ÀúÀåÇØ ³õ¾Ò´Ù°¡ ÀÌ ¹Ýº¹ÀÚ°¡ °¡¸®Å°´Â À§Ä¡¿¡¼­ ¾ðÁ¦µçÁö Àç¼øÈ¸°¡ °¡´ÉÇÏ´Ù.

¹Ý¸é ÀÔ·Â, Ãâ·Â ¹Ýº¹ÀÚ´Â ÀÌ·± Ư¼ºÀÌ ¾ø¾î ÇÑ À§Ä¡¿¡ ´ëÇØ µü ÇÑ ¹ø¾¿¸¸ ÀÐ°í ¾²±â°¡ °¡´ÉÇÏ´Ù. Űº¸µå´Â »ç¿ëÀÚ°¡ ۸¦ ´©¸¦ ¶§ ±× °ªÀ» ¹Þ¾Æ ³õÁö ¾ÊÀ¸¸é ÇÑ ¹ø ÀÐÀº ³»¿ëÀ» ´Ù½Ã ÀÐÁö ¸øÇÑ´Ù. ÀԷµǴ ½ÃÁ¡¿¡ µü ÇÑ ¹ø¸¸ ÀÐÀ» ¼ö ÀÖ´Ù. ÄÜ¼Ö È­¸éÀ̳ª ÇÁ¸°ÅÍ´Â ÀÏ´Ü Ãâ·ÂÇØ ¹ö¸®¸é ´õ ÀÌ»ó ¼öÁ¤ ºÒ°¡´ÉÇÏ´Ù. ÀÌ¹Ì Ãâ·ÂÇØ ¹ö¸° ¹®ÀÚ¸¦ ´Ù¸¥ ¹®ÀÚ·Î ¹Ù²ã¼­ ÀçÃâ·ÂÇÒ ¼ö´Â ¾ø´Ù.

¼ø¹æÇ⠹ݺ¹ÀÚ´Â ÇÑ À§Ä¡¸¦ ¿©·¯ ¹ø ÀÐ°í ¾µ ¼ö Àֱ⠶§¹®¿¡ ´ÙÁß ÆÐ½º ¾Ë°í¸®ÁòÀ» Áö¿øÇÑ´Ù. ´ÙÁß ÆÐ½º ¾Ë°í¸®ÁòÀº ±¸ÇöÀ» À§ÇØ ÄÁÅ×À̳ʸ¦ ¿©·¯ ¹ø ½ºÄµÇØ¾ß Çϴµ¥ ´ëÇ¥ÀûÀ¸·Î ºÎºÐ ÀÏÄ¡ ±¸°£À» °Ë»öÇÏ´Â search ¾Ë°í¸®ÁòÀ» µé ¼ö ÀÖ´Ù. search´Â Ç¥ÁØ strstr ÇÔ¼ö¿Í µ¿ÀÛÀÌ ºñ½ÁÇѵ¥ ºÎºÐ ÀÏÄ¡ ±¸°£À» ã±â À§Çؼ­´Â °Ë»ö ´ë»ó ±¸°£°ú ¿ÏÀüÈ÷ ÀÏÄ¡ÇÏ´Â ºÎºÐÀ» ãÀ» ¶§±îÁö ÄÁÅ×À̳ÊÀÇ °¢ ¿ä¼ÒµéÀ» ¿©·¯ ¹ø Àоî¾ß ÇÑ´Ù. ÀÔ·Â ¹Ýº¹ÀÚ´Â Àбâ´Â °¡´ÉÇÏÁö¸¸ °°Àº À§Ä¡¸¦ µÎ ¹ø ÀÐÀ» ¼ö ¾øÀ¸¹Ç·Î ÀÌ·± ¾Ë°í¸®Áò ±¸Çö¿¡´Â ÀûÇÕÇÏÁö ¾Ê´Ù.

Ç¥ÁØ STL¿¡´Â ±¸ÇöµÇ¾î ÀÖÁö ¾ÊÁö¸¸ ´Ü¼ø ¿¬°á ¸®½ºÆ®(slist)¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ°¡ ´ëÇ¥ÀûÀÎ ¼ø¹æÇ⠹ݺ¹ÀÚÀÌ´Ù. ´Ü¼ø ¿¬°á ¸®½ºÆ®´Â Àб⠾²±â°¡ °¡´ÉÇϸç ÇÑ ³ëµå¸¦ ¿©·¯ ¹ø ÀÐÀ» ¼öµµ ÀÖ´Ù. ±×·¯³ª ´Ü¼ø ¿¬°á ¸®½ºÆ®ÀÇ ³ëµå´Â ´ÙÀ½ ³ëµå¸¦ °¡¸®Å°´Â ¸µÅ© Çϳª¹Û¿¡ ¾øÀ¸¹Ç·Î ÀüÁø¸¸ °¡´ÉÇϸç ÈÄÁøÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ Á¶°Ç¿¡ ¸Â´Â ¹Ýº¹ÀÚ°¡ ¹Ù·Î ¼ø¹æÇ⠹ݺ¹ÀÚÀÌ´Ù.

¾ç¹æÇ⠹ݺ¹ÀÚ(Bidirectional Iterator)´Â ¿ª¹æÇâÀ¸·Îµµ À̵¿ÀÌ °¡´ÉÇÑ ¹Ýº¹ÀÚÀÌ´Ù. ¼ø¹æÇâ À̵¿À» À§ÇÑ ++ ¿¬»êÀÚ´Â ¹°·ÐÀÌ°í ¿ª¹æÇâÀÇ À̵¿À» À§ÇÑ -- ¿¬»êÀÚµµ ÀüÀ§Çü, ÈÄÀ§ÇüÀ¸·Î °¢°¢ ±¸ÇöµÇ¾î ÀÖ´Ù. ¿ª¹æÇâÀ¸·Î °Ë»öÇѴٰųª ¸ðµç ¿ä¼ÒÀÇ ¼ø¼­¸¦ ¹Ý´ë·Î µÚÁýÀ» ¶§´Â ¾ÕµÚ·Î ÀÚÀ¯·Ó°Ô À̵¿ÇØ¾ß ÇϹǷΠ¿ª¹æÇ⠹ݺ¹ÀÚ°¡ ÇÊ¿äÇÏ´Ù. STL ÄÁÅ×ÀÌ³Ê Áß ÀÌÁß ¿¬°á ¸®½ºÆ®·Î ±¸ÇöµÇ¾î ÀÖ´Â list°¡ ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ Á¦°øÇÑ´Ù. ¾ç¹æÇ⠹ݺ¹ÀÚ´Â ¼ø¹æÇ⠹ݺ¹ÀÚÀÇ ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù.

´ÙÀ½ µÎ ¾Ë°í¸®ÁòÀº °¢°¢ ¼ø¹æÇ⠹ݺ¹ÀÚ¿Í ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ ¿ä±¸ÇÑ´Ù. ÇÔ¼öÀÇ ¿øÇü¿¡ FwdIt, BiIt¶ó´Â ¹Ýº¹ÀÚ Å¸ÀÔÀÌ ºÐ¸íÈ÷ ¸í½ÃµÇ¾î ÀÖ´Ù.

 

void replace (FwdIt first, FwdIt last, const Type& Old, const Type& New);

void reverse(BiIt first, BiIt last);

 

replace´Â ÄÁÅ×À̳ÊÀÇ Old°ªÀ» ã¾Æ New °ªÀ¸·Î ±³Ã¼ÇÑ´Ù. ã´Â °ªÀÌ ¸Â´ÂÁö È®ÀÎÇϱâ À§ÇØ ¹Ýº¹ÀÚ¸¦ Àоî¾ß ÇÏ¸ç ¸ÂÀ» °æ¿ì New·Î ¹Ù²Ù±âµµ ÇØ¾ß ÇϹǷΠÀб⠾²±â°¡ ¸ðµÎ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ´ëü µ¿ÀÛÀ» ¿©·¯ ¹ø ÇÒ ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î ±¸°£ÀÇ Ã³À½ºÎÅÍ ³¡±îÁö ÇÑ ¹ø¸¸ ¼øÈ¸Çϸ鼭 ¸ðµç ÀÛ¾÷À» ¸¶Ä¥ ¼ö ÀÖÀ¸¸ç ÇÑ ¹ø Áö³ª¿Â À§Ä¡¸¦ ´Ù½Ã °Ë»öÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±×·¡¼­ replace°¡ ¿ä±¸ÇÏ´Â ÃÖ¼ÒÀÇ ¹Ýº¹ÀÚ´Â ¼ø¹æÇ⠹ݺ¹ÀÚÀÌ´Ù.

reverse´Â ±¸°£³»ÀÇ ¿ä¼ÒµéÀ» ¹Ý´ë·Î µÚÁý¾î Àç¹èÄ¡Çϴµ¥ Àб⠾²±â°¡ ¸ðµÎ °¡´ÉÇØ¾ß ÇÏ¸ç ¾çÂÊ ³¡¿¡¼­ µ¿½Ã¿¡ ¼øÈ¸¸¦ ½ÃÀÛÇÏ¿© °ªÀ» ±³È¯ÇØ¾ß ÇϹǷΠ¹Ýº¹ÀÚ°¡ Áõ°¡, °¨¼Ò¸¦ ¸ðµÎ Áö¿øÇØ¾ß ÇÑ´Ù. ±×·¡¼­ reverse´Â ¼ø¹æÇ⠹ݺ¹Àڷδ ±¸ÇöµÉ ¼ö ¾øÀ¸¸ç ÃÖ¼ÒÇÑ ¾ç¹æÇâ À̵¿À» Áö¿øÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â µÎ ¾Ë°í¸®ÁòÀ» Å×½ºÆ®ÇÑ´Ù.

 

¿¹ Á¦ : fwdbiiterator

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";

      copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }

 

void main()

{

     int ari[]={78,85,95,93,86,60,72,99,56,85};

     vector<int> vi(&ari[0],&ari[10]);

 

     dump("¿øº»",vi);

     replace(vi.begin(),vi.end(),85,100);

     dump("´ëüÈÄ",vi);

     reverse(vi.begin(),vi.end());

     dump("µÚÁýÀº ÈÄ",vi);

}

 

º¤ÅÍ¿¡ Á¡¼ö°ªµéÀ» ¹«ÀÛÀ§·Î ³ª¿­ÇØ ³õ°í ´ëü ¹× µÚÁý±â¸¦ ÇØ º¸¾Ò´Ù. replace·Î 85Á¡Â¥¸®¸¦ ã¾Æ 100À¸·Î ´ëüÇÑ ÈÄ reverse·Î º¤Å͸¦ Åë°·Î µÚÁý´Â´Ù. Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù. º¤Å͸¦ ´ýÇÁÇÒ ¶§´Â ¾Õ Ç׿¡¼­ ¼Ò°³ÇÑ dump ÇÔ¼ö¸¦ »ç¿ëÇߴµ¥ ÀÌ¹Ì »ìÆìº» ¼Ò½ºÀ̹ǷΠ¾ÕÀ¸·Î´Â Ȱ¿ë¸¸ Çϱâ·Î ÇÏÀÚ.

 

¿øº»        ==> 78 85 95 93 86 60 72 99 56 85

´ëüÈÄ      ==> 78 100 95 93 86 60 72 99 56 100

µÚÁýÀº ÈÄ   ==> 100 56 99 72 60 86 93 95 100 78

 

ÃÖÃÊ ari ¹è¿­¿¡ ÃʱâÈ­µÈ Á¡¼öµéÀÌ Ãâ·ÂµÇ¾ú°í 85°¡ 100À¸·Î ¹Ù²ï º¤ÅͰ¡ ±× ´ÙÀ½ÁÙ¿¡ Ãâ·ÂµÇ¾úÀ¸¸ç ¸¶Áö¸·ÁÙ¿¡ ¼ø¼­°¡ µÚÁý¾îÁø º¤ÅͰ¡ Ãâ·ÂµÇ¾ú´Ù. µÎ ¾Ë°í¸®ÁòÀÌ ¾î¶»°Ô µ¿ÀÛÇÒÁö »ó»óÇØ º¸ÀÚ.

replace´Â ÀüÁø À̵¿Çϸç ÀÐ°í ¾²±â¸¸ ¹Ýº¹ÇϹǷΠ¼ø¹æÇ⠹ݺ¹ÀÚÀ̸é ÃæºÐÇÏ´Ù. ¹Ý¸é reverse´Â ÇÑÂÊÀº ¾Õ¿¡¼­ µÚ·Î, ÇÑÂÊÀº µÚ¿¡¼­ ¾ÕÀ¸·Î À̵¿Çϸ鼭 °ªÀ» ±³È¯(Àбâ + ¾²±â)ÇØ¾ß ÇϹǷΠ¾ç¹æÇâÀ¸·Î À̵¿ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ±×¸²¿¡¼­ º¸´Ù½ÃÇÇ µÎ ¾Ë°í¸®ÁòÀÌ ¿ä±¸ÇÏ´Â ¹Ýº¹ÀÚÀÇ ±â´ÉÀÌ ´Ù¸£´Ù. Çì´õ ÆÄÀÏÀ» ¿­¾î¼­ ±¸ÇöµÈ Äڵ带 »ìÆìº¸¸é ÀÌ ¾Ë°í¸®ÁòµéÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ¸ç ¿Ö ¼ø¹æÇâ, ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ ¿ä±¸ÇÏ´ÂÁö È®½ÇÈ÷ ¾Ë ¼ö ÀÖ´Ù.