ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ(Random Iterator)´Â ÃÖ»óÀ§ ·¹º§ÀÇ ¹Ýº¹ÀÚÀ̸ç Á¦°øÇÏ´Â ±â´ÉÀÌ °¡Àå ¸¹´Ù. ¾ç¹æÇ⠹ݺ¹ÀÚÀÇ ¸ðµç ±â´ÉÀ» Æ÷ÇÔÇϹǷΠ* ¿¬»êÀÚ·Î Àбâ, ¾²±â¿Í ++, -- ¿¬»êÀÚ·Î ¾Õ µÚ·Î À̵¿Çϱâ, °°Àº À§Ä¡¸¦ ¿©·¯ ¹ø ¾×¼¼½º Çϱ⠱â´ÉÀ» Á¦°øÇÑ´Ù. ¿©±â¿¡ ÀÓÀÇ À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ Ãß°¡·Î Á¦°øµÇ´Âµ¥ °Å¸®¿¡ »ó°ü¾øÀÌ Ç×»ó »ó¼ö ½Ã°£³»¿¡ À̵¿ °¡´ÉÇÏ´Ù.
¾ç¹æÇ⠹ݺ¹ÀÚ´Â ++, -- °¡ °¡´ÉÇÏÁö¸¸ Ç×»ó ÇÑľ¿¸¸ ¾Õ µÚ·Î À̵¿ÇÒ ¼ö ÀÖ´Â °Í°ú ºñ±³µÈ´Ù. ÀÓÀÇ À§Ä¡·Î °ðÀå À̵¿ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ¹Ýº¹ÀÚ¿¡ ÀÓÀÇÀÇ Á¤¼ö¸¦ ´õÇÏ´Â +n ¿¬»êÀ» Á¦°øÇÑ´Ù´Â ¶æÀÌ´Ù. Æ÷ÀÎÅÍ¿¡ +n ¿¬»êÀ» Àû¿ëÇϸé n*sizeof(ŸÀÔ) ¸¸Å Áï½Ã À̵¿Çϴµ¥ ÀÓÀÇ Á¢±Ù ¿¬»êÀÚ°¡ ¹Ù·Î ÀÌ ±â´ÉÀ» Á¦°øÇϸç +n¿¡ ÀÇÇØ ÇöÀç À§Ä¡¿¡¼ n¸¸Å ¶³¾îÁø ¿ä¼Ò·Î °ðÀå À̵¿ÇÒ ¼ö ÀÖ´Ù.
+n ¿¬»êÀÌ °¡´ÉÇϸé Ãß°¡·Î °¡´ÉÇØÁö´Â ¿¬»êÀÌ ¿©·¯ °³ »ý±ä´Ù. -nÀº À½¼ö¸¦ ´õÇÏ´Â °Í°ú °°À¸¹Ç·Î ´ç¿¬È÷ °¡´ÉÇϸç [ ] ¿¬»êÀÚ´Â *¿Í +n¿¬»êÀÇ Á¶ÇÕÀÎ *(it+n) ¿¬»êÀ̹ǷΠ¿ª½Ã Áö¿øµÈ´Ù. [ ] ¿¬»êÀÚ¸¦ »ç¿ëÇϸé ÁöÁ¤ÇÑ ÀÓÀÇÀÇ À§Ä¡°ªÀ» ¹Ù·Î ÀÐ°í ¾µ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ º¹ÇÕ ´ëÀÔ ¿¬»êÀÚ +=, -=µµ Áö¿øµÇ´Âµ¥ ¸ðµÎ +nÀ¸·ÎºÎÅÍ ÆÄ»ýµÇ´Â ¿¬»êµéÀÌ´Ù.
ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ°¡ +nÀ» Áö¿øÇÒ ¼ö ÀÖ´Â ÀÌÀ¯´Â ÄÁÅ×À̳ÊÀÇ ¿ä¼ÒµéÀÌ ¹è¿Ã³·³ ÀÎÁ¢ÇÏ°Ô ¹èÄ¡µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ¿ä¼ÒÀÇ Å©±â°¡ ÀÏÁ¤ÇÏ°í ¼·Î ÀÌ¿ôÇØ ÀÖÀ¸¹Ç·Î À̵¿ÇÏ°í ½ÍÀº °Å¸®¿¡ ¿ä¼Ò Å©±â¸¦ °öÇѸ¸Å ´õÇϱ⸸ Çϸé Áï½Ã À̵¿ °¡´ÉÇÏ´Ù. ¹è¿À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ »ý°¢ÇØ º¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.
°°Àº ¹è¿³»ÀÇ ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ³¢¸®´Â »¬¼Àµµ °¡´ÉÇÏ´Ù. µÎ ¹Ýº¹ÀÚ »çÀÌ¿¡ ÀÖ´Â ¿ä¼ÒµéÀÌ °°Àº Å©±â·Î ¸ð¿© ÀÖÀ¸¹Ç·Î »¬¼À °á°ú´Â ±¸°£³»ÀÇ ¿ä¼Ò °³¼ö¸¦ ³ªÅ¸³»´Â Á¤¼ö°ªÀÌ´Ù. ¶ÇÇÑ ¿ä¼ÒµéÀÌ ¼±ÇüÀûÀ¸·Î ¹èÄ¡µÇ¾î ÀÖÀ¸¹Ç·Î ¹Ýº¹ÀÚ³¢¸® ´ë¼Ò ºñ±³µµ °¡´ÉÇÏ´Ù. ¹øÁö°ªÀÌ Å« ¹Ýº¹ÀÚ°¡ Ç×»ó ´õ µÚÂÊ¿¡ ÀÖÀ¸¹Ç·Î ´ë¼Ò ºñ±³¿¡ ÀÇÇØ ¹Ýº¹ÀÚÀÇ ÀüÈĸ¦ ¸íÈ®ÇÏ°Ô ¾Ë ¼ö ÀÖ´Ù.
¸µÅ©¿¡ ÀÇÇØ ¿¬°áµÇ¾î ÀÖ´Â list ÄÁÅ×À̳ʴ ÀÓÀÇ Á¢±ÙÀÌ ºÒ°¡´ÉÇϹǷΠ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ Á¦°øÇÑ´Ù. ¿¬°á ¸®½ºÆ®ÀÇ ³ëµåµéÀÌ ÀÎÁ¢ÇØ ÀÖÁö ¾Ê°í ¸Þ¸ð¸® ¿©±â Àú±â¿¡ Èð¾îÁ® ÀÖÀ¸¹Ç·Î +n ¿¬»êÀÌ ºÒ°¡´ÉÇÏ¸ç ¸µÅ©¸¦ µû¶ó ÇÑľ¿ Á¡ÁøÀûÀ¸·Î À̵¿ÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ¶ÇÇÑ ¹Ýº¹ÀÚÀÇ ¹øÁö¸¸À¸·Î ÀüÈĸ¦ ÆÇº°ÇÒ ¼ö ¾øÀ¸¹Ç·Î ´ë¼Ò ºñ±³µµ ºÒ°¡´ÉÇÏ¸ç ¹Ýº¹ÀÚ³¢¸® »¬¼ÀÀ» ÅëÇØ ±¸°£ÀÇ ¿ä¼Ò °³¼ö¸¦ ±¸ÇÒ ¼öµµ ¾ø´Ù. ÀÓÀÇ Á¢±ÙÀÌ ¾Æ´Ñ ¹Ýº¹ÀÚ·Î +n ¿¬»êÀ» Çϰųª µÎ ¹Ýº¹ÀÚÀÇ °Å¸®¸¦ ±¸ÇÏ°í ½Í´Ù¸é ´ÙÀ½ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
void advance(InIt &first, int off);
int distance(InIt first, InIt last);
advance´Â ¹Ýº¹ÀÚ¸¦ off¸¸Å µÚÂÊÀ¸·Î À̵¿½Ã۴µ¥ off°¡ À½¼öÀÏ ¼öµµ ÀÖÀ¸¹Ç·Î ¾ÕÂÊÀ¸·Îµµ À̵¿ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÀÔ·Â ¹Ýº¹ÀÚ(µû¶ó¼ ¼ø¹æÇâ, ¾ç¹æÇâµµ)¿¡ +n ¿¬»êÀÌ °¡´ÉÇØÁø´Ù. distance´Â µÎ ¹Ýº¹ÀÚ »çÀÌÀÇ °Å¸®¸¦ ±¸ÇÏ¿© Á¤¼ö°ªÀ» ¸®ÅÏÇÑ´Ù. ¿¹Á¦¸¦ ÅëÇØ µÎ ÇÔ¼ö¸¦ °£´ÜÈ÷ Å×½ºÆ®ÇØ º¸ÀÚ. ¼Ò½º¿¡¼ ÁÖ¼® 󸮵Ǿî ÀÖ´Â ÁÙÀº ¿¡·¯°¡ ¹ß»ýÇÏ´Â ºÎºÐÀÌ´Ù.
¿¹ Á¦ : advance |
#include <iostream>
#include <list>
using namespace std;
void main()
{
int ari[]={1,2,3,4,5,6,7};
list<int> li(&ari[0],&ari[7]);
list<int>::iterator it=li.begin();
printf("%d\n",*it); // ÀÐÀ» ¼ö ÀÖ´Ù.
printf("%d\n",*(++it)); // ÇÑÄ ÀüÁø °¡´É
// printf("%d\n",it[3]); // ¿¡·¯:ÀÓÀÇ À§Ä¡¸¦ ÀÐÁö´Â ¸øÇÔ
// it+=3; // ¿¡·¯:ÀÓÀÇ À§Ä¡·Î À̵¿ÇÏÁö ¸øÇÔ
advance(it,3); // advance·Î À̵¿ °¡´É
printf("%d\n",*it);
// printf("°Å¸®=%d\n",li.end()-li.begin()); // ¿¡·¯:¹Ýº¹ÀÚ³¢¸® »¬¼ÀÀº ¾ÈµÊ
printf("°Å¸®=%d\n",distance(li.begin(),li.end())); // distance·Î °Å¸®¸¦ ±¸ÇÏ´Â °ÍÀº °¡´É
}
¸®½ºÆ® ÄÁÅ×À̳ʰ¡ Á¦°øÇÏ´Â ¾ç¹æÇ⠹ݺ¹ÀÚ´Â +nÀ» Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î [ ] ¿¬»êÀÚ·Î ÀÓÀÇ À§Ä¡¸¦ Àаųª +=nÀ¸·Î ÀÓÀÇ À§Ä¡·Î À̵¿ÇÒ ¼ö ¾øÀ¸¸ç ¹Ýº¹ÀÚ³¢¸® »¬¼ÀÀ» ÇÒ ¼öµµ ¾ø´Ù. ±×·¯³ª advance¿Í distance ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é °¡´ÉÇϱâ´Â ÇÏ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
1
2
5
°Å¸®=7
ÀÌ °á°ú¸¦ º¸¸é ¾ç¹æÇ⠹ݺ¹ÀÚµµ ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÑ °Íó·³ º¸ÀÌ¸ç ½ÇÁ¦·Î °¡´ÉÇϱ⵵ ÇÏ´Ù. ±×·¯³ª ¼ÓÀ» µé¿©´Ù º¸¸é ¾öû³ ²Ç¼ö°¡ ¼û¾î ÀÖÀ½À» ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº advance ÇÔ¼öÀÇ ±¸Çö ÄÚµåÀε¥ ¾î¶»°Ô +n ¿¬»êÀ» ¼öÇàÇÏ´ÂÁö º¸ÀÚ.
void advance(InIt &first, int off)
{
for (;off > 0;--off) { ++first; }
for (;off < 0;++off) { --first; }
}
offÀÇ ºÎÈ£¿¡ µû¶ó µÎ ·çÇÁ Áß Çϳª¸¦ ½ÇÇàÇϴµ¥ ¾ç¼öÀÎ °æ¿ì¸¸ º¸¸é off¸¦ °è¼Ó °¨¼Ò½ÃŰ¸é¼ first ¹Ýº¹ÀÚ¸¦ °è¼Ó Áõ°¡½ÃŲ´Ù. °á±¹ ++first¸¦ off¸¸Å ¹Ýº¹ÇÔÀ¸·Î½á first¸¦ off¸¸Å µÚÂÊÀ¸·Î À̵¿½ÃŰ´Â °ÍÀÌ´Ù. ¸®½ºÆ®ÀÇ ¹Ýº¹ÀÚ¿¡ ÀÌ ÇÔ¼ö¸¦ Àû¿ëÇÏ¸é ¸µÅ©¸¦ µû¶ó ´ÙÀ½ ³ëµå·Î À̵¿Çϱ⸦ off¸¸Å ¹Ýº¹ÇÏ´Â ´Ü¼ø ¹«½ÄÇÑ ÁþÀ» ÇÏ°Ô µÈ´Ù.
ÁøÂ¥ ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÑ ¹Ýº¹ÀÚ´Â +nÀ» ÇÑ ¹ø¿¡ ¼öÇàÇÒ ¼ö Àִµ¥ ºñÇØ ¾ç¹æÇ⠹ݺ¹ÀÚ´Â off¸¸Å ¹Ýº¹ÇØ¾ß ÇϹǷΠ¼öÇà ¼Óµµ´Â °¨È÷ ºñ±³°¡ µÇÁö ¾Ê´Â´Ù. ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ´Â it[30000]À» ÇÑ ¹ø¿¡ ¹Ù·Î ã¾Æ °¡Áö¸¸ ¾ç¹æÇ⠹ݺ¹ÀÚ´Â ´ÙÀ½ ¸µÅ© ã¾Æ 3¸¸¸®¸¦ °¡¾ß ÇϹǷΠÁøÁ¤ÇÑ ÀǹÌÀÇ +n ¿¬»êÀ» Áö¿øÇÑ´Ù°í º¼ ¼ö ¾ø´Ù. advance¿Í distance´Â ²À ÇÊ¿äÇÒ °æ¿ì¿¡ »ç¿ëÇÒ ¼ö´Â ÀÖÁö¸¸ nÀÌ Ä¿Áö¸é È¿À²ÀÌ ¶³¾îÁø´Ù´Â Á¡À» ¾Ë¾Æ¾ß ÇÑ´Ù.
ÀÌ·± Àǹ̿¡¼ º¼ ¶§ ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ´Â ´Ü¼øÈ÷ ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù´Â Á¤µµ·Î Á¤ÀÇÇÏ´Â °Íº¸´Ù »ó¼ö ½Ã°£³»¿¡ ¿øÇÏ´Â °÷À¸·Î Áï½Ã À̵¿ÇÒ ¼ö ÀÖ´Â ¹Ýº¹ÀÚ·Î Á¤ÀÇÇÏ´Â °ÍÀÌ ¿Ç´Ù. ¿ä¼ÒµéÀÌ ÀÎÁ¢ÇØ ÀÖ´Â º¤ÅÍ´Â ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¸¦ Á¦°øÇϸç Á¤Àû ¹è¿ÀÇ À§Ä¡¸¦ °¡Áö´Â Æ÷ÀÎÅ͵µ ¿Ïº®ÇÑ ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚÀÌ´Ù.
ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ´Â °¡Àå ±â´ÉÀÌ ¸¹Àº ÃÖ»óÀ§ÀÇ ¹Ýº¹ÀÚÀÌ¸ç ¸ðµç ¹Ýº¹ÀÚÀÇ ±â´ÉÀ» ´Ù Æ÷ÇÔÇÑ´Ù. ±×·¡¼ STLÀÇ ¸ðµç ¾Ë°í¸®Áò°ú ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹Ý¸é ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¸¦ ¿ä±¸ÇÏ´Â ¾Ë°í¸®ÁòÀº ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î sort°¡ Àִµ¥ È¿À²ÀûÀÎ Á¤·ÄÀ» À§Çؼ´Â ¿ä¼Ò³¢¸® ºñ±³, ±³È¯À» ¸¹ÀÌ ÇØ¾ß Çϸç À̶§ ºü¸¥ ¼Óµµ·Î ¿ä¼Ò »çÀ̸¦ À̵¿ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ À̺Р°Ë»öÀ» ÇÏ´Â binary_search¾Ë°í¸®Áòµµ ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¸¦ ¿ä±¸ÇÑ´Ù.