19Àå¿¡¼ °¡Àå ±âÃÊÀûÀÎ ÀÚ·á ±¸Á¶ÀÇ ÇϳªÀÎ µ¿Àû ¹è¿À» ÀÛ¼ºÇØ º¸¾Ò´Ù. ¸î °³ÀÇ Àü¿ªº¯¼ö¿Í ¹è¿ °ü¸® ÇÔ¼öµé¸¸ ÀÛ¼ºÇØ ³õÀ¸¸é ½ÇÇàÁß¿¡ Å©±â¸¦ ¿øÇϴ¸¸Å ´Ã¸± ¼ö ÀÖÀ¸¸ç ¹è¿ Áß°£¿¡µµ »ðÀÔ, »èÁ¦°¡ °¡´ÉÇØ¼ ¿©·¯ ¸ð·Î À¯¿ëÇÏ´Ù. ±×·±µ¥ Àü¿ªº¯¼ö¿Í °ü¸® ÇÔ¼öµéÀÌ Èð¾îÁ® ÀÖ¾î¼ Àç»ç¿ëÇϱⰡ Á¶±Ý ¹ø°Å·Î¿î ¸éÀÌ ÀÖ¾ú´Ù.
¿©±â¼´Â µ¿Àû ¹è¿À» ÇϳªÀÇ Å¬·¡½º¾È¿¡ ĸ½¶ÈÇØ º¸±â·Î ÇÏÀÚ. ±¸Á¶Àû ÇÁ·Î±×·¡¹Ö ±â¹ýÀ¸·Î ÀÛ¼ºÇÑ µ¿Àû ¹è¿ÀÌ ¾î¶»°Ô Ŭ·¡½º·Î º¯È¯µÇ´ÂÁö º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. º°´Ù¸¥ ±â´É Ãß°¡´Â ¾øÀÌ 19Àå¿¡¼ ¸¸µé¾ú´ø µ¿Àû ¹è¿À» ±×´ë·Î C++·Î ¿Å±â±â¸¸ ÇÑ´Ù. ´ÙÀ½ÀÌ °á°ú ÄÚµåÀÌ´Ù.
|
¿¹ Á¦ : DArray |
#include <Turboc.h>
#include <iostream>
using namespace std;
#define ELETYPE int
class DArray
{
protected:
ELETYPE *ar;
unsigned size;
unsigned num;
unsigned growby;
public:
DArray(unsigned asize=100, unsigned agrowby=10);
~DArray();
void Insert(int idx, ELETYPE value);
void Delete(int idx);
void Append(ELETYPE value);
ELETYPE GetAt(int idx) { return ar[idx]; }
unsigned GetSize() { return size; }
unsigned GetNum() { return num; }
void SetAt(int idx, ELETYPE value) { ar[idx]=value; }
void Dump(char *sMark);
};
DArray::DArray(unsigned asize, unsigned agrowby)
{
size=asize;
growby=agrowby;
num=0;
ar=(ELETYPE *)malloc(size*sizeof(ELETYPE));
}
DArray::~DArray()
{
free(ar);
}
void DArray::Insert(int idx, ELETYPE value)
{
unsigned need;
need=num+1;
if (need > size) {
size=need+growby;
ar=(ELETYPE *)realloc(ar,size*sizeof(ELETYPE));
}
memmove(ar+idx+1,ar+idx,(num-idx)*sizeof(ELETYPE));
ar[idx]=value;
num++;
}
void DArray::Delete(int idx)
{
memmove(ar+idx,ar+idx+1,(num-idx-1)*sizeof(ELETYPE));
num--;
}
void DArray::Append(ELETYPE value)
{
Insert(num,value);
}
void DArray::Dump(char *sMark)
{
unsigned i;
cout << sMark << " => Å©±â=" << size << ",°³¼ö=" << num << " : ";
for (i=0;i<num;i++) {
cout << GetAt(i) << ' ';
}
cout << endl;
}
void main()
{
DArray ar;
int i;
for (i=1;i<=8;i++) ar.Append(i);ar.Dump("8°³ Ãß°¡");
ar.Insert(3,10);ar.Dump("10 »ðÀÔ");
ar.Insert(3,11);ar.Dump("11 »ðÀÔ");
ar.Insert(3,12);ar.Dump("12 »ðÀÔ");
ar.Delete(7);ar.Dump("¿ä¼Ò 7 »èÁ¦");
}
Ŭ·¡½º À̸§Àº µ¿Àû ¹è¿À» ÀǹÌÇÏ´Â DArray·Î ºÙ¿´´Ù. Àü¿ªº¯¼ö·Î Á¸ÀçÇÏ´ø ar, size, num, growby µî ¹è¿ÀÇ ÁÖ¿ä ¼Ó¼º°ªµéÀ» DArray Ŭ·¡½ºÀÇ ¸â¹ö º¯¼ö·Î Æ÷ÇÔ(ĸ½¶È)Ç쵂 º¸È£ ¿µ¿ª¿¡ ¹èÄ¡ÇÏ¿© ¿ÜºÎ¿¡¼ ÀÌ °ªÀ» ÇԺηΠ°Çµå¸®Áö ¸øÇϵµ·Ï(Á¤º¸ ÀºÆó) Çß´Ù. ºñ°ø°³ ¿µ¿ª(private)ÀÌ ¾Æ´Ñ º¸È£¿µ¿ª(protected)¿¡ ÀÌ ¸â¹ö¸¦ ¼±¾ðÇÑ °ÍÀº »ó¼ÓÀ» °í·ÁÇØ¼ÀÌ´Ù.
±¸Á¶Ã¼¸¦ ÃʱâÈÇÏ´ø InitArray ÇÔ¼öÀÇ ±â´ÉÀº »ý¼ºÀÚ·Î ¿Å°ÜÁ³À¸¸ç »ç¿ëÀÚ°¡ ±ô¹Ú ÀØ°í ¹è¿À» ÃʱâÈÇÏÁö ¾Ê´Â ½Ç¼ö¸¦ ¿øÃµÀûÀ¸·Î Â÷´ÜÇß´Ù. DArray °´Ã¼¸¦ ¸¸µé ¶§ ¹Ýµå½Ã ¹è¿ÀÇ ÃÖÃÊ ÇÒ´ç Å©±â¿Í ¿©À¯ºÐÀ» ÁöÁ¤ÇØ¾ß ÇÏ¸ç ¸¸¾à »ý·«ÇÒ °æ¿ì µðÆúÆ® Àμö¿¡ µû¶ó 100, 10ÀÌ °Á¦·Î Àû¿ëµÈ´Ù. ¹è¿À» ÇØÁ¦ÇÏ´Â ±â´ÉÀº ÆÄ±«ÀÚ·Î ¿Å°ÜÁ³À¸¸ç »ç¿ëÀÚ°¡ Ȥ½Ã¶óµµ UnInitArray È£ÃâÀ» ±î¸Ô´õ¶óµµ ¸Þ¸ð¸® ´©¼ö´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù.
³ª¸ÓÁö Insert, Delete, Append ÇÔ¼öÀÇ ÄÚµå´Â 19ÀåÀÇ ¿¹Á¦¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ¸ç ¹è¿ÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ´Â Dump ÇÔ¼ö¸¸ ¾à°£ ¼öÁ¤Çß´Ù. printf·Î´Â ÀÓÀÇÀÇ Å¸ÀÔÀ» Ãâ·ÂÇÒ ¼ö ¾øÀ¸¸ç ŸÀÔ¿¡ µû¶ó %d, %f µî ¼½ÄÀ» ¹Ù²ã¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖÀ¸¹Ç·Î Á» ´õ ¹ü¿ëÀûÀÌ°í °´Ã¼ ÁöÇâÀûÀÎ coutÀ¸·Î Ãâ·Â ¹æ¹ýÀ» ¹Ù²Ù¾ú´Ù. ÂüÁ¶ÇÏ´Â ´ë»óÀÌ Àü¿ªº¯¼ö°¡ ¾Æ´Ï¶ó °´Ã¼ÀÇ ¸â¹ö º¯¼öÀ̹ǷΠÀÌÁ¦ ¿©·¯ °³ÀÇ µ¿Àû ¹è¿À» µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. main¿¡¼´Â DArray °´Ã¼ arÀ» ¼±¾ðÇϰí ÀÌ ¹è¿¿¡ °ªÀ» Ãß°¡, »ðÀÔ, »èÁ¦ÇØ º¸¾Ò´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
8°³ Ãß°¡ => Å©±â=100,°³¼ö=08 : 1 2 3 4 5 6 7 8
10 »ðÀÔ => Å©±â=100,°³¼ö=09 : 1 2 3 10 4 5 6 7 8
11 »ðÀÔ => Å©±â=100,°³¼ö=10 : 1 2 3 11 10 4 5 6 7 8
12 »ðÀÔ => Å©±â=100,°³¼ö=11 : 1 2 3 12 11 10 4 5 6 7 8
¿ä¼Ò 7 »èÁ¦ => Å©±â=100,°³¼ö=10 : 1 2 3 12 11 10 4 6 7 8
°´Ã¼¸¦ ¾²Áö ¾Ê¾ÒÀ» ¶§¿Í °á°ú´Â µ¿ÀÏÇÏ´Ù. ÇÏÁö¸¸ Äڵ带 ºñ±³ÇØ º¸¸é °´Ã¼ ¹öÀüÀÌ ÈξÀ ´õ »ç¿ëÇϱ⠽±°í ¾ÈÁ¤ÀûÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀûÀýÇÏ°Ô Á¤º¸¸¦ ÀºÆóÇϰí ÀÖ°í °´Ã¼¸¦ »ý¼ºÇÏ´Â °Í¸¸À¸·Î µ¿Àû ¹è¿ÀÌ ÃʱâÈµÇ¸ç ¸â¹ö ÇÔ¼öµµ ÈξÀ ´õ Á÷°üÀûÀÌ´Ù. ¶ÇÇÑ DArray.h Çì´õ ÆÄÀÏ¿¡ Ŭ·¡½º¸¦ ¼±¾ðÇϰí DArray.cpp ±¸Çö ÆÄÀÏ¿¡ ¸â¹ö ÇÔ¼ö¸¦ ÀÛ¼ºÇØ ³õÀ¸¸é ÀÌ µÎ ÆÄÀϸ¸ º¹»çÇÔÀ¸·Î½á ÀÓÀÇÀÇ ÇÁ·ÎÁ§Æ®¿¡¼ DArray¸¦ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ °¢ °´Ã¼°¡ ar, size, num µûÀ§ÀÇ µ¿Àû ¹è¿ °ü¸®¿¡ ÇÊ¿äÇÑ ¸ðµç ¸â¹ö¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î µÎ °³ ÀÌ»óÀÇ µ¿Àû ¹è¿À» µ¿½Ã¿¡ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ º¯¼öµéÀÌ Àü¿ªÀ̾úÀ» ¶§´Â ´Ü ÇϳªÀÇ µ¿Àû ¹è¿¸¸ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù.
¹°·Ð ¿©±â¼ ¸¸µç DArray´Â ±â´ÉÀûÀ¸·Î ¿Ïº®ÇÏÁö´Â ¾Ê¾Æ¼ ½Ç¿ëÀûÀ¸·Î ¾²±â¿¡´Â ¾ÆÁ÷µµ ºÎÁ·ÇÑ Á¡ÀÌ ¸¹´Ù. ¿ì¼± ¾ÆÁ÷µµ ¿ä¼ÒÀÇ Å¸ÀÔÀ» ÁöÁ¤Çϱâ À§ÇØ ELETYPEÀ̶ó´Â ¸ÅÅ©·Î¸¦ »ç¿ëÇÑ´Ù´Â Á¡ÀÌ Á¶±Ý ¸ø¸¶¶¥Çѵ¥ ÀÌ ¸ÅÅ©·ÎÀÇ ¿ªÇÒÀº Â÷ÈÄ ÅÛÇø´À¸·Î ´ëüÇÒ ¼ö ÀÖ´Ù. ¹è¿³¢¸® º¹»ç, ¿¬°áÇÏ´Â ±â´É, °Ë»ö, Á¤·Ä µîÀÇ ´Ù¾çÇÑ ±â´Éµéµµ ´õ ¿ä±¸µÇ´Âµ¥ ¸â¹ö ÇÔ¼ö¸¦ ´Ã¸®±â¸¸ Çϸé ÀÌ·± ±â´ÉÀº ½±°Ô È®ÀåÇÒ ¼ö ÀÖ´Ù.
¶ÇÇÑ ¾ÆÁ÷ malloc, free ÇÔ¼ö¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ´Ü¼ø ŸÀÔÀÇ ¹è¿À» ´Ù·ê ¼ö´Â ÀÖÁö¸¸ °´Ã¼ÀÇ ¹è¿À» ´Ù·ç±â¿¡´Â ºÎÀûÀýÇÏ´Ù. °´Ã¼ÀÇ ¹è¿À» ´Ù·ê ¼ö ÀÖµµ·Ï ÇÏ·Á¸é new/delete ¿¬»êÀÚ·Î ÇÒ´ç ¹× ÇØÁ¦ÇØ¾ß ÇÏ¸ç »ðÀÔÇÒ ¶§ »ý¼ºÀÚ¸¦ È£ÃâÇÏ°í »èÁ¦ÇÒ ¶§ ÆÄ±«ÀÚ¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
DArrayCopy
DArray ¿¹Á¦ÀÇ main ÇÔ¼ö ³¡¿¡ ´ÙÀ½ µÎ ÁÙÀ» »ðÀÔÇØ º¸¾Æ¶ó.
void main()
{
....
DArray ar2=ar;
ar2.Dump("º¹»çÇØ¼ ¸¸µç ar2 °´Ã¼");
}
ar°´Ã¼·ÎºÎÅÍ ar2¸¦ ¸¸µç ÈÄ Ãâ·ÂÇØ º¸¾Ò´Ù. Ãâ·ÂÀº Á¦´ë·Î µÇÁö¸¸ ÇÁ·Î±×·¥ÀÌ Á¾·áÇÒ ¶§ ´Ù¿îµÇ´Âµ¥ ¹®Á¦ÀÇ ¿øÀÎÀ» ¼³¸íÇÏ°í ´Ù¿îµÇÁö ¾Êµµ·Ï ÇØ°áÇØ º¸¾Æ¶ó.