39-3-´Ù.¿ª¹æÇ⠹ݺ¹ÀÚ

¿ª¹æÇ⠹ݺ¹ÀÚ´Â ¼øȸ ¹æÇâÀÌ °Å²Ù·Î µÇ¾î ÀÖ´Â ¹Ýº¹ÀÚÀÌ´Ù. ¾ç¹æÇ⠹ݺ¹ÀÚ³ª ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¿¡ ¾î´ðÅ͸¦ Àû¿ëÇÏ¿© ±¸ÇöµÇ¸ç ++, -- ¿¬»êÀÌ ¹Ý´ë ¹æÇâÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù. °¢ ÄÁÅ×À̳ʴ ´ÙÀ½ µÎ °³ÀÇ ¿ª¹æÇ⠹ݺ¹ÀÚ Å¸ÀÔÀ» Á¦°øÇϹǷΠÀÌ Å¸ÀÔÀÇ ¹Ýº¹ÀÚ¸¦ ¼±¾ðÇϱ⸸ ÇÏ¸é µÈ´Ù. »ó¼ö, ºñ»ó¼ö ¹öÀüÀÌ µû·Î ÁغñµÇ¾î ÀÖ´Ù.

 

reverse_iterator

const_reverse_iterator

 

ÄÁÅ×À̳ʷκÎÅÍ ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ ¾òÀ» ¶§´Â rbegin, rend ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ¿ª¹æÇ⠹ݺ¹ÀÚ·Î ÄÁÅ×À̳ʸ¦ ¼øȸÇÏ¸é ³¡¿¡¼­ºÎÅÍ ¾ÕÂÊÀ¸·Î ¼øȸÇÒ ¼ö ÀÖ´Ù. ÀÌ µÎ ¸â¹ö ÇÔ¼ö°¡ °¡¸®Å°´Â À§Ä¡´Â ´ÙÀ½°ú °°Àºµ¥ ´Ü¼øÈ÷ begin, endÀÇ ¸ÂÀºÆí ¹Ý´ëÂÊÀ» °¡¸®Å°´Â °ÍÀº ¾Æ´Ï´Ù.

¹üÀ§ÀÇ ¿øÄ¢¿¡ ÀÇÇØ ±¸°£ÀÇ Ã³À½Àº Æ÷ÇÔµÇ¸ç ³¡Àº Ç×»ó Á¦¿ÜµÇ¾î¾ß ÇϹǷΠrbegin ~ rend·Î ¿ª¹æÇâ ¼øȸ¸¦ ÇÏ·Á¸é rbeginÀº ³¡¿ä¼Ò¸¦ °¡¸®Å°°í rend´Â ù ¿ä¼Òº¸´Ù Çϳª ´õ ¾ÕÂÊÀ» °¡¸®ÄÑ¾ß ÇÑ´Ù. ¹°·Ð rendÀ§Ä¡´Â ½ÇÁ¦·Î ÄÁÅ×À̳ÊÀÇ ³»ºÎµµ ¾Æ´Ï¸ç ó¸® ´ë»ó¿¡µµ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ´ÙÀ½ ¿¹Á¦´Â º¤Å͸¦ ¿ª¼øÀ¸·Î ¼øȸÇÏ¸ç ¿ä¼ÒµéÀ» Ãâ·ÂÇÑ´Ù.

 

¿¹ Á¦ : revit

#include <iostream>

#include <vector>

using namespace std;

 

void main()

{

     int ari[]={1,2,3,4,5};

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

 

     vector<int>::reverse_iterator rit;

     for (rit=vi.rbegin();rit!=vi.rend();rit++) {

          printf("%d\n",*rit);

     }

}

 

reverse_iterator ŸÀÔÀÇ rit¸¦ ¼±¾ðÇÏ°í rbeginÀ¸·Î ÃʱâÈ­ÇÏ¸é º¤ÅÍÀÇ Á¦ÀÏ ³¡ ¿ä¼Ò¸¦ °¡¸®Å³ °ÍÀÌ´Ù. ÀÌ ¿ä¼Ò¸¦ Ãâ·ÂÇÏ°í rit¸¦ 1 Áõ°¡½ÃÅ°¸é ++ ¿¬»êÀÚ°¡ ¹Ýº¹ÀÚ¸¦ º¤ÅÍÀÇ ¼±µÎÂÊÀ¸·Î À̵¿½ÃŲ´Ù. ÀÌ °úÁ¤À» rend°¡ ¾Æ´Ò ¶§±îÁö, Áï ù ¿ä¼Òº¸´Ù ¾Õ¿¡ À̸£±â Á÷Àü±îÁö ¹Ýº¹ÇϹǷΠù ¹ø° ¿ä¼Ò¸¦ Ãâ·ÂÇÑ ÈÄ ·çÇÁ¸¦ Å»ÃâÇÏ°Ô µÈ´Ù. Ãâ·Â °á°ú´Â 5, 4, 3, 2, 1Àε¥ ´ÙÀ½Ã³·³ ¼øȸÇÏ´Â °Í°ú »ç½Ç»ó µ¿ÀÏÇÏ´Ù.

 

     vector<int>::iterator it;

     for (it=vi.end()-1;;it--) {

          printf("%d\n",*it);

          if (it==vi.begin()) break;

     }

 

¼ø¹æÇ⠹ݺ¹ÀÚ¸¦ »ç¿ëÇÏ¿© Á÷Á¢ ¹Ý´ë·Î ¼øȸÇß´Ù. À̶§ ½ÃÀÛ ÁöÁ¡Àº endº¸´Ù Çϳª ´õ ¾ÕÂÊÀ̾î¾ß Çϸç begin À§Ä¡µµ Ãâ·Â ´ë»ó¿¡ Æ÷ÇԵǹǷΠÀÏ´Ü Ãâ·ÂÇÑ ÈÄ begin¿¡ À̸£·¶À¸¸é ·çÇÁ Áß°£¿¡¼­ Å»ÃâÇØ¾ß ÇÑ´Ù. ¼ø¹æÇ⠹ݺ¹Àڷεµ ¿ª¹æÇâ ¼øȸ°¡ °¡´ÉÇϱâ´Â ÇÏÁö¸¸ º¸´Ù½ÃÇÇ Á÷°üÀûÀÌÁö ¸øÇÏ°í ºÒÆíÇÏ´Ù.

¾Ë°í¸®Áò ÇÔ¼öµéÀº ±¸ÇöÀ» À§ÇØ Ç×»ó ¼ø¹æÇâ ¼øȸ¸¦ Çϵµ·Ï µÇ¾î Àִµ¥ ¹Ýº¹ÀÚ¸¦ À̵¿½ÃÅ°±â À§Çؼ­ ´Ã»ó ++ ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ ¾Ë°í¸®ÁòÀ¸·Î Àü´ÞÇϸé ++ ¿¬»êÀÇ Àǹ̰¡ ¹Ù²î¹Ç·Î ¾Ë°í¸®ÁòÀÇ ¼øȸ ¹æÇâÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. find´Â ¹Ýº¹ÀÚ¸¦ ¾ÕÀ¸·Î À̵¿ÇÏ¸ç °ªÀ» ãÁö¸¸ ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ Àü´ÞÇÏ¸é µÚÂÊÀ¸·Î À̵¿ÇϹǷΠ¿ª¹æÇâ¿¡¼­ °Ë»öÇÒ ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : revfind

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

void main()

{

     int ari[]={6,2,9,2,7};

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

 

     puts(find(vi.begin(),vi.end(),2)==vi.end() ? "¾ø´Ù.":"ÀÖ´Ù.");

     puts(find(vi.rbegin(),vi.rend(),2)==vi.rend() ? "¾ø´Ù.":"ÀÖ´Ù.");

}

 

vi º¤ÅÍ¿¡ µÎ °³ÀÇ 2°¡ Æ÷ÇԵǾî Àִµ¥ ¼ø¹æÇâÀ¸·Î ãÀ» ¶§¿Í ¿ª¹æÇâÀ¸·Î ãÀ» ¶§ °Ë»öµÇ´Â °ªÀÌ ´Ù¸£´Ù. ÀÌ °æ¿ì´Â µÑ ´Ù °°Àº 2ÀÇ °ªÀ» °¡ÁöÁö¸¸ À§Ä¡¿¡ µû¶ó ¿ä¼ÒÀÇ Àǹ̰¡ ´Þ¶óÁú ¼öµµ ÀÖ´Ù. ¾î¶² ¿ä¼Ò°¡ ³¡¿¡¼­ ¾îµðÂë¿¡ ÀÖ´ÂÁö¸¦ °Ë»öÇÏ°í ½ÍÀ» ¶§ ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ »ç¿ëÇÑ´Ù.

¿ª¹æÇ⠹ݺ¹ÀÚ¿¡´Â ¿ø·¡ÀÇ ¼ø¹æÇ⠹ݺ¹ÀÚ¸¦ ¸®ÅÏÇÏ´Â base ¸â¹ö ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ´Ù. »ðÀÔ, »èÁ¦ ÇÔ¼öµéÀº ¿ª¹æÇ⠹ݺ¹ÀÚ¸¦ ¹Þ¾ÆµéÀÌÁö ¾Ê±â ¶§¹®¿¡ ¿ª¹æÇâ °Ë»öÇÑ À§Ä¡¿¡ ´ë°í ¾î¶² ÀÛ¾÷À» ÇÏ°í ½ÍÀ» ¶§´Â ¼ø¹æÇ⠹ݺ¹ÀÚ·Î ¹Ù²Ù¾î¾ß ÇÑ´Ù. ¶ÇÇÑ ¿ª¹æÇâ °Ë»ö ÈÄ¿¡ ´Ù½Ã ¼ø¹æÇâÀ¸·Î °Ë»öÇÏ°í ½ÍÀ» ¶§ base·Î ¾ðÁ¦µçÁö ¼ø¹æÇ⠹ݺ¹ÀÚ¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. base·Î ±¸ÇÑ ¼ø¹æÇ⠹ݺ¹ÀÚ´Â ¿ª¹æÇ⠹ݺ¹ÀÚº¸´Ù Ç×»ó Çϳª ´õ Å« °ªÀ» °¡Áø´Ù.

ÀÌ·¸°Ô µÇ¾î ÀÖ´Â ÀÌÀ¯´Â ¼ø¹æÇ⠹ݺ¹ÀÚ°¡ ¿ª¹æÇ⠹ݺ¹ÀÚº¸´Ù ÇÑÄ­ ´õ ¿À¸¥ÂÊ¿¡ ÀÖÀ¸¸ç ÀÌ·¸°Ô ÇØ¾ß rbeginÀÇ base°¡ end°¡ µÇ±â ¶§¹®ÀÌ´Ù. ´ÙÀ½Àº ¿ª¹æÇâ °Ë»ö ÈÄ ´Ù½Ã ¼ø¹æÇâÀ¸·Î °Ë»öÇÑ´Ù.

 

¿¹ Á¦ : revbase

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

void main()

{

     const char *str="c++ standard template library";

     vector<char> vc(&str[0],&str[strlen(str)]);

 

     vector<char>::reverse_iterator rit;

     vector<char>::iterator bit,it;

     rit=find(vc.rbegin(),vc.rend(),'t');

     bit=rit.base();

     it=find(bit,vc.end(),'a');

     if (it!=vc.end()) {

          printf("°Ë»ö °á°ú = %c\n",*it);

     }

}

 

¹®ÀÚ¿­ ³¡¿¡¼­ºÎÅÍ 't'¸¦ ã±â À§ÇØ ¿ª¹æÇâ °Ë»öÀ» ÇßÀ¸¸ç 't' ÀÌÈÄ ÃÖÃÊ·Î ³ªÅ¸³ª´Â a¸¦ ã±â À§ÇØ ¼ø¹æÇ⠹ݺ¹ÀÚ bit¸¦ rit.base·Î ±¸ÇÏ¿© bitÀÌÈĺÎÅÍ °Ë»öÇß´Ù.