31-1-´Ù.µ¿ÀÏÇÑ ¾Ë°í¸®Áò Á¶°Ç

ÇÔ¼ö ÅÛÇø´Àº ÄÚµå´Â µ¿ÀÏÇϰí ŸÀÔ¸¸ ´Ù¸¥ ÇÔ¼öÀÇ ÁýÇÕÀ» Á¤ÀÇÇÑ´Ù. Áï, ÅÛÇø´À¸·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Â ÇÔ¼öµéÀº ¹®Á¦¸¦ Ǫ´Â ¾Ë°í¸®ÁòÀÌ µ¿ÀÏÇØ¾ß ÇÏ¸ç ¾Ë°í¸®ÁòÀÌ ´Ù¸¥ ÇÔ¼ö´Â ÅÛÇø´ÀÇ ÀÏ¿øÀÌ µÉ ¼ö ¾ø´Ù. ÀÌ·± ÇÔ¼öµéÀÇ ÁýÇÕÀ» ¸î °³ ´õ ±¸°æÇØ º¸µµ·Ï ÇÏÀÚ.

 

¿¹ Á¦ : TemplateFunc

#include <Turboc.h>

 

template <typename T>

T Max(T a, T b)

{

     return (a > b) ? a:b;

}

 

template <typename T>

T Add(T a, T b)

{

     return a+b;

}

 

template <typename T>

T Abs(T a, T b)

{

     return (a > 0) ? a:-a;

}

 

void main()

{

     int a=1,b=2;

     double c=3.4,d=5.6;

     printf("´õ Å« Á¤¼ö = %d\n",Max(a,b));

     printf("´õ Å« ½Ç¼ö = %f\n",Max(c,d));

}

 

µÎ °ª Áß Å« °ªÀ» ã´Â Max, µÎ °ªÀÇ ÇÕÀ» ±¸ÇÏ´Â Add, Àý´ë°ªÀ» ã´Â Abs ÇÔ¼öµéÀÌ ÅÛÇø´À¸·Î Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº Àμö·Î Àü´ÞµÈ ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÒ ¼ö ÀÖÀ¸¸ç È£ÃâºÎ¿¡¼­´Â ½ÇÀμöÀÇ Å¸ÀÔÀ» º¸°í ÀûÀýÇÑ ÇÔ¼ö¸¦ ±¸Ã¼È­ÇÏ¿© È£ÃâÇÑ´Ù.

¿¹Á¦ÀÇ ¼¼ ÇÔ¼ö ÅÛÇø´µéÀ» º¸¸é °ªÀ» ºñ±³, ¿¬»êÇÏ°í ¼±ÅÃÇÏ´Â ¾Ë°í¸®ÁòÀÌ Å¸ÀÔ°ú »ó°ü¾øÀÌ Ç×»ó µ¿ÀÏÇÏ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ´Þ¶óÁú ¼ö ÀÖ´Â °ÍÀº ¿À·ÎÁö ŸÀÔ»ÓÀ̹ǷΠÀÌ·± ÇÔ¼öµéÀÌ ÅÛÇø´À¸·Î ÅëÇÕµÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¸¸¾à ¾Ë°í¸®ÁòÀÌ µ¿ÀÏÇÏÁö ¾Ê´Ù¸é, Áï ÇÔ¼öÀÇ º»Ã¼°¡ ¿ÏÀüÈ÷ ´Þ¶ó¾ß ÇÑ´Ù¸é ÀÌ ÇÔ¼öµéÀº °°Àº ÅÛÇø´À¸·Î ÅëÇÕµÉ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î µÎ °ªÀ» ±³È¯ÇÏ´Â Swap ÇÔ¼ö ÅÛÇø´ÀÇ °æ¿ì ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ Àß µ¿ÀÛÇÏÁö¸¸ ¹è¿­¿¡ ´ëÇØ¼­´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¸¸¾à ´ÙÀ½°ú °°ÀÌ ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ µÎ °³ ¼±¾ðÇϰí ÀÌ Æ÷ÀÎÅ͸¦ Swap ÇÔ¼ö·Î Àü´ÞÇß´Ù°í ÇØ º¸ÀÚ.

 

int a[]={1,2,3},b[]={4,5,6};

int *pa=a,*pb=b;

Swap(pa, pb);

// Swap(a, b);

 

Swap(pa, pb)´Â ÀÏ´Ü Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´Â °Íó·³ º¸ÀδÙ. ±×·¯³ª ÀÌ´Â ¹è¿­À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¸ ±³È¯ÇÑ °ÍÀÌÁö ¹è¿­ ÀÚü°¡ ±³È¯µÈ °ÍÀº ¾Æ´Ï´Ù. Swap(a, b) È£Ãâ·Î ¹è¿­ ÀÚü¸¦ ±³È¯ÇÏ·Á°í ½ÃµµÇÏ¸é Æ÷ÀÎÅÍ »ó¼öÀÎ ¹è¿­¸íÀ» º¯°æÇÒ ¼ö ¾ø´Ù´Â ¿¡·¯·Î 󸮵ȴÙ. µÎ ¹è¿­ÀÇ Å¸ÀÔ°ú Å©±â°¡ ÀÏÄ¡ÇÏ´õ¶óµµ ¹è¿­À» ±³È¯ÇÏ´Â ¾Ë°í¸®ÁòÀº ´Ü¼ø ŸÀÔÀ̳ª ±¸Á¶Ã¼¸¦ ±³È¯ÇÏ´Â °Í°ú´Â ´Ù¸£´Ù. ¹è¿­³¢¸®´Â ´ëÀÔµÇÁö ¾ÊÀ¸¹Ç·Î ¹è¿­ÀÇ ¿ä¼ÒµéÀ» ÀÏ´ëÀÏ·Î ±³È¯ÇØ¾ß ÇÏ¸ç ¹è¿­ÀÇ Å©±â°¡ °¡º¯ÀûÀ̹ǷΠ±æÀÌ¿¡ ´ëÇÑ º°µµÀÇ Á¤º¸¸¦ ´õ Àü´ÞÇØ¾ß ÇÑ´Ù.

µÎ ¹è¿­ÀÇ ³»¿ëÀ» Åë°·Î ±³È¯ÇÏ·Á¸é º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î¾ß Çϴµ¥ ´Ù¾çÇÑ ¹è¿­ ¿ä¼Ò¿¡ ´ëÇØ µ¿ÀÛÇÏ·Á¸é ¿ä¼ÒÀÇ Å¸ÀÔº°·Î ÀÏ·ÃÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÒ °ÍÀÌ´Ù. À̶§µµ ¿ä¼ÒÀÇ Å¸ÀÔ¸¸ ´Þ¶óÁö¹Ç·Î ÅÛÇø´À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹è¿­À» ±³È¯ÇÏ´Â ÇÔ¼ö ÅÛÇø´À» Á¤ÀÇÇϴµ¥ ÀÓÀÇÀÇ TÇüÀ» ¿ä¼Ò·Î °¡Áö´Â num±æÀÌÀÇ µÎ ¹è¿­À» ¸Þ¸ð¸® º¹»ç¸¦ ÅëÇØ ±³È¯ÇÑ´Ù.

 

¿¹ Á¦ : SwapArray

#include <Turboc.h>

 

template <class T>

void SwapArray(T *a, T *b,int num)

{

     void *t;

 

     t=malloc(num*sizeof(T));

     memcpy(t,a,num*sizeof(T));

     memcpy(a,b,num*sizeof(T));

     memcpy(b,t,num*sizeof(T));

     free(t);

}

 

void main()

{

     int a[]={1,2,3},b[]={4,5,6};

     char c[]="¹®ÀÚ¿­",d[]="string";

     SwapArray(a,b,sizeof(a)/sizeof(a[0]));

     printf("before c=%s,d=%s\n",c,d);

     SwapArray(c,d,sizeof(c)/sizeof(c[0]));

     printf("after c=%s,d=%s\n",c,d);

}

 

¾Õ¿¡¼­ ¸¸µé¾ú´ø SwapVoid¿Í »ó´çÈ÷ À¯»çÇѵ¥ ¸Þ¸ð¸®ÀÇ ±æÀ̸¦ Àμö·Î Àü´Þ¹Þ´Â °ÍÀÌ ¾Æ´Ï¶ó ¿ä¼ÒÀÇ °³¼ö¸¦ Àü´Þ¹Þ´Â´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. main¿¡¼­ Å©±â 3ÀÇ Á¤¼öÇü ¹è¿­°ú Å©±â 7ÀÇ ¹®ÀÚÇü ¹è¿­¿¡ ´ëÇØ ±³È¯À» ÇßÀ¸¹Ç·Î SwapArray´Â µÎ °¡Áö ¹öÀüÀ¸·Î ±¸Ã¼È­µÉ °ÍÀÌ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

before c=¹®ÀÚ¿­,d=string

after c=string,d=¹®ÀÚ¿­

 

º¸´Ù½ÃÇÇ ¹è¿­À» ±³È¯ÇÏ´Â ¾Ë°í¸®ÁòÀº ´Ü¼ø ŸÀÔÀ» ±³È¯ÇÏ´Â ¾Ë°í¸®Áò°ú ¿ÏÀüÈ÷ Ʋ¸®°í ÇÊ¿äÇÑ Àμö ¸ñ·Ïµµ ´Ù¸£±â ¶§¹®¿¡ ÇϳªÀÇ ÇÔ¼ö ÅÛÇø´À¸·Î ÅëÇÕµÉ ¼ö ¾øÀ¸¸ç µû·Î ÅÛÇø´À» ±¸¼ºÇØ¾ß ÇÑ´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â ¹è¿­À» ±³È¯ÇÏ´Â ÇÔ¼ö ÅÛÇø´¿¡ SwapArray¶ó´Â À̸§À» »ç¿ëÇߴµ¥ Àμö ¸ñ·ÏÀÌ ´Þ¶ó ¿À¹ö·ÎµùÀÌ °¡´ÉÇϹǷΠSwapÀ̶ó´Â À̸§À» °°ÀÌ ½áµµ »ó°ü¾ø´Ù. Áï ÅÛÇø´³¢¸®µµ ¿À¹ö·ÎµùÀº °¡´ÉÇÏ´Ù.