µÎ °ªÀ» ±³È¯ÇÏ´Â swap ¿¬»êÀº ¿©·¯ °¡Áö ¾Ë°í¸®Áò¿¡ µÎ·ç ¾²ÀδÙ.
µ¿ÀÛÀº °£´ÜÇÏÁö¸¸ È£Ãâ Ƚ¼ö°¡ ¸¹¾Æ ÀÌ ÇÔ¼ö°¡ »¡¶ó¾ß Àüü ¾Ë°í¸®Áòµµ »¡¶óÁø´Ù.
¶ÇÇÑ ±³È¯ ŸÀÔ¿¡ µû¶ó ¿©·¯ ¹úÀÇ ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù.
C++ Ç¥ÁØ ¶óÀ̺귯¸®ÀÎ STLÀº ÅÛÇø´À¸·Î ŸÀÔ µ¶¸³¼ºÀ» È®º¸ÇÑ´Ù.
Ç¥ÁØ swap ÇÔ¼ö¿Í Á÷Á¢ ¸¸µç ÇÔ¼ö, ¸ÅÅ©·Î ÇÔ¼ö µîÀÇ ¼Óµµ¸¦ ºñ±³ÇØ º¸¾Ò´Ù.
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
#define SWAP(x,y,t) {t=x;x=y;y=t;}
void inline Swap(int& left, int& right)
{
int t;
t = left;
left = right;
right = t;
}
int main()
{
time_t t1, t2;
int left = 3, right = 4;
// STLÀÇ swap ÇÔ¼ö
time(&t1);
for (int i = 0; i < 1000000001; i++) {
std::swap(left, right);
}
time(&t2);
printf("swap : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
// Á÷Á¢ ¸¸µç Swap ÇÔ¼ö
time(&t1);
for (int i = 0; i < 1000000001; i++) {
Swap(left, right);
}
time(&t2);
printf("Swap : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
// ¸ÅÅ©·Î ÇÔ¼ö
time(&t1);
int t;
for (int i = 0; i < 1000000001; i++) {
SWAP(left, right, t);
}
time(&t2);
printf("SWAP : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
// Á÷Á¢ ±³È¯
time(&t1);
for (int i = 0; i < 1000000001; i++) {
t = left; left = right; right = t;
}
time(&t2);
printf("Á÷Á¢ : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
// +/-
time(&t1);
for (int i = 0; i < 1000000001; i++) {
left = left + right; right = left - right; left = left - right;
}
time(&t2);
printf("+/- : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
// XOR
time(&t1);
for (int i = 0; i < 1000000001; i++) {
left = left ^ right; right = left ^ right; left = left ^ right;
}
time(&t2);
printf("XOR : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
}
°¢ ¾Ë°í¸®ÁòÀ¸·Î µÎ °³ÀÇ Á¤¼ö¸¦ ±³È¯Ç쵂 1¾ï 1¹ø ¹Ýº¹ÇÏ¿© ½ÇÁ¦ °ªÀÌ ¹Ù²îµµ·Ï Çß´Ù. ÀÌ ¿¹Á¦¸¦ ¸¸µé ¶§ STLÀÇ °íµµ·Î ÃÖÀûÈµÈ ¾Ë°í¸®ÁòÀÌ Á» ´õ ºü¸£Áö ¾ÊÀ»±î ³»½É ±â´ëÇß´Ù. ±×·¯³ª ½ÇÇà °á°ú¸¦ º¸¸é ¿ÏÀü µÞÅë¼ö¸¦ ¸Â´Â ´À³¦ÀÌ´Ù.
swap : left=4, right = 3, ½Ã°£=54ÃÊ
Swap : left=3, right = 4, ½Ã°£=14ÃÊ
SWAP : left=4, right = 3, ½Ã°£=2ÃÊ
Á÷Á¢ : left=3, right = 4, ½Ã°£=2ÃÊ
+/- : left=4, right = 3, ½Ã°£=4ÃÊ
XOR : left=3, right = 4, ½Ã°£=3ÃÊ
STLÀÇ swap ÇÔ¼ö°¡ Á¦ÀÏ ´À¸®´Ù. ¼Ò½º¸¦ ã¾Æ º¸¸é ÅÛÇø´À¸·Î ŸÀÔ¿¡ µ¶¸³ÀûÀ̸ç inline ÁöÁ¤±îÁö µÇ¾î ÀÖ°í ·¹ÆÛ·±½º Àμö¸¦ ¹Þ´Â´Ù. ±×·¯³ª ³»ºÎ¿¡ ÀÌ»óÇÑ ¸ÅÅ©·Î·Î ¶±Ä¥ÀÌ µÇ¾î Àִµ¥ ¾Æ¸¶µµ °´Ã¼ÀÎ °æ¿ì ÇÊ¿äÇÑ Á¶Ä¡¸¦ ÃëÇϱâ À§ÇÑ ÄÚµåÀÎ °Í °°´Ù. ŸÀÔ µ¶¸³ÀûÀ¸·Î ¸¸µé´Ù º¸´Ï ¼Óµµ´Â ±×¾ß ¸»·Î ÇüÆí¾ø´Ù. ¿ø·¡ºÎÅÍ STLÀ» ÁÁ¾ÆÇÏÁö ¾Ê¾ÒÁö¸¸ ÀÌ·¸°Ô ¾û¸ÁÀÏ ÁÙÀº ¿¹»óÇÏÁö ¸øÇß´Ù.
±×·¸´Ù¸é STLÀÇ ºÒÇÊ¿äÇÑ Äڵ带 °È¾î ³»°í Á÷Á¢ int, char ŸÀÔ¿¡ ´ëÇÑ Swap¸¸ µÎ ¹ú ¸¸µé¸é ¾î¶³±î ½Í¾î ¸¸µé¾î º¸¾Ò´Ù. STL¿¡ ºñÇØ¼´Â ¼¼ ¹è Á¤µµ ´õ ºü¸¥µ¥ ºÒÇÊ¿äÇÑ Äڵ尡 Á¦¿ÜµÇ¾î¼ ±×·¸´Ù. ÀÌ °á°ú¸¦ º¸°í ŸÀÔ µ¶¸³ÀÌ°í ¹¹°í STLÀº °³³ª Áà ¹ö·Á¶ó´Â »ý°¢ÀÌ ´õ ±»¾îÁö°Ô µÇ¾ú´Ù.
SWAP ¸ÅÅ©·Î´Â ´Ü 2Ãʹۿ¡ °É¸®Áö ¾Ê´Â´Ù. ¿ª½Ã ´Ü¼ø ¹«½ÄÇÑ°Ô ÃÖ°í´Ù. ´Ù¸¸ ¸ÅÅ©·Î´Â Àӽà º¯¼ö t¸¦ ¿ÜºÎ¿¡ º°µµ·Î ¼±¾ðÇØ ³õ¾Æ¾ß Çϰí Àμö·Îµµ Àü´ÞÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼ ±ò²ûÇÏÁö ¸øÇÏ´Ù. ±×·¯³ª ¸Å¹ø Áö¿ª º¯¼ö¸¦ »õ·Î ¸¸µå´Â °Íº¸´Ù´Â È®½ÇÈ÷ ºü¸£´Ù. ¸ÅÅ©·Î ´ë½Å Á÷Á¢ Äڵ带 Àü°³ÇÏ´Â °Íµµ °á°ú´Â ´ç¿¬È÷ °°´Ù. ÀÌ°Ô ´Ù¸£¸é ¸»ÀÌ ¾ÈµÈ´Ù.
´ÙÀ½À¸·Î µÎ °ªÀ» +, - ¿¬»êÀÚ·Î ´õÇÏ°í »©´Â ¹æ¹ý°ú XOR ¿¬»êÀÇ Æ¯¼öÇÔÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ Àִµ¥ Àӽà º¯¼ö°¡ ¾ø¾îµµ µÈ´Ù´Â ÀåÁ¡Àº ÀÖÁö¸¸ ±× »ÓÀÌ´Ù. Äڵ尡 ªÀº °Íµµ ¾Æ´Ï°í ¼Óµµ°¡ ´õ ºü¸¥ °Íµµ ¾Æ´Ï´Ù. Á» ½Å±âÇØ º¸ÀÏ »ÓÀÌ´Ù. °á·ÐÀûÀ¸·Î µÎ °ªÀ» ±³È¯ÇÒ ¶§´Â ¿ª½Ã temp¸¦ °ÅÃÄ »óÈ£ ´ëÀÔÇÏ´Â ¹æ¹ýÀÌ °¡Àå ºü¸£´Ù.

µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù. |