//--------------------------------------------------------- // ÇÁ·Î±×·¥: 2Â÷ ¹æÁ¤½Ä ±Ù ±¸Çϱâ. C++ class ÀÌ¿ë // ³¯ Â¥: quard_equ_class.cpp // ÆÄ ÀÏ: 2004-10-23 ~ // ÇÔ ¼ö: // ¼³ ¸í: Ŭ·¡½º¸¦ Ȱ¿ëÇØ¼­ ´Ù½Ã Çѹø Ç®¾î º¸ÀÚ. // Àú ÀÚ: ±èÁø¼ö // ȯ °æ: winxp 2.4c ram 1g bcc5.5 // ±â Ÿ: // ¼ö Á¤: //--------------------------------------------------------- #include #define test 0 //#define test 1 template // T ´Â ÀÌ¹Ì ÇÒ´çµÈ °´Ã¼¸¦ ¹Þ´Â´Ù. class Container { private : T *head,*tail,*cur; // Linked list¸¦ »ç¿ë. °¡º¯ int cnt; // ÀúÀåµÇ¾îÀÖ´Â ÀÚ·á¼ö. // Linked list¸¦ »ç¿ëÇϱâ À§Çؼ­´Â class T ´Â // ¹Ýµå½Ã T *next; ¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. public : Container(); ~Container(); void insert(T *data); void remove(int idx); T *getItem(int idx); int getElementCnt(); T *operator[](int idx); }; //--------------------------- template Container::Container() { // Linked list¸¦ ÃʱâÈ­ ÇÏÀÚ. head = new T; tail = new T; head->next = tail; tail->next = tail; // ÀúÀåµÇ¾îÀÖ´Â °´Ã¼ÀÇ °³¼ö 0 cnt = 0; } //--------------------------- template Container::~Container() { cur = head->next; while(cur != tail) { // Container ¿¡ »õ·ÎÀÌ Ãß°¡µÈ list ¸Þ¸ð¸® ÇØÁ¦... delete cur; cur = cur->next; } delete head,tail; } //--------------------------- template void Container::insert(T *data) { // Container ´Â ÀÌ¹Ì ÇÒ´çµÈ °´Ã¼µéÀÇ ÁÖ¼Ò¸¸ °¡Áö°í ÀÖ´Ù. data->next = head->next; head->next = data; cnt++; } //--------------------------- template void Container::remove(int idx) { cur = head->next; T *pre = head; // ¾Æ¹«·± °´Ã¼°¡ ÀúÀåÀÌ ¾ÈµÇÀְųª // ÀúÀåµÈ °´Ã¼ º¸´Ù Å« ¹øÈ£ÀÇ »èÁ¦¸¦ ¿ä±¸ ÇÒ¶§... ¿¡·¯. if(idx <= 0 || idx > cnt) { cout << "¼±ÅÃÇÑ °´Ã¼´Â ¾ø½À´Ï´Ù." << endl; cout << "È®ÀÎÇÏ½Ã°í ´Ù½Ã ¿äûÇϼ¼¿ä." << endl; return; } for(int i=1 ; cur != tail ; i++) { if( i == idx) // idx ¹øÂ° °´Ã¼¸¦ »èÁ¦ ÇÑ´Ù. { pre->next = cur->next; delete cur; break; } pre = cur; cur = cur->next; } } //--------------------------- template T *Container::getItem(int idx) { cur = head->next; // ¾Æ¹«·± °´Ã¼°¡ ÀúÀåÀÌ ¾ÈµÇÀְųª // ÀúÀåµÈ °´Ã¼ º¸´Ù Å« ¹øÈ£ÀÇ »èÁ¦¸¦ ¿ä±¸ ÇÒ¶§... ¿¡·¯. if(idx <= 0 || idx > cnt) { cout << "¼±ÅÃÇÑ °´Ã¼´Â ¾ø½À´Ï´Ù." << endl; cout << "È®ÀÎÇÏ½Ã°í ´Ù½Ã ¿äûÇϼ¼¿ä." << endl; return NULL; } for(int i=1 ; cur != tail ; i++) { if( i == idx) // idx ¹øÂ° °´Ã¼¸¦ »èÁ¦ ÇÑ´Ù. { return cur; } cur = cur->next; } } //--------------------------- template int Container::getElementCnt() { return cnt; } //--------------------------- template T *Container::operator[](int idx) { cur = head->next; // ¾Æ¹«·± °´Ã¼°¡ ÀúÀåÀÌ ¾ÈµÇÀְųª // ÀúÀåµÈ °´Ã¼ º¸´Ù Å« ¹øÈ£ÀÇ »èÁ¦¸¦ ¿ä±¸ ÇÒ¶§... ¿¡·¯. if(idx <= 0 || idx > cnt) { cout << "¼±ÅÃÇÑ °´Ã¼´Â ¾ø½À´Ï´Ù." << endl; cout << "È®ÀÎÇÏ½Ã°í ´Ù½Ã ¿äûÇϼ¼¿ä." << endl; return NULL; } for(int i=1 ; cur != tail ; i++) { if( i == idx) // idx ¹øÂ° °´Ã¼¸¦ »èÁ¦ ÇÑ´Ù. { return cur; } cur = cur->next; } return NULL; } //--------------------------------------------------------- struct node { int data; struct node *next; }; //--------------------------------------------------------- void main() { #if (test == 0) { // int pointer¸¦ °¡Áö´Â Container °´Ã¼ temp¸¦ »ý¼º. Container temp; node *number = new node[3]; number[0].data = 10; number[1].data = 20; number[2].data = 30; temp.insert(&number[0]); temp.insert(&number[1]); temp.insert(&number[2]); cout << temp.getElementCnt() << endl; cout << temp[1]->data << endl; cout << temp[2]->data << endl; cout << temp[3]->data << endl; delete [] number; system("pause"); cout<<"ok?"; } #endif #if (test == 1) { // int pointer¸¦ °¡Áö´Â Container °´Ã¼ temp¸¦ »ý¼º. Container *temp; temp = new Container; node *number = new node[3]; number[0].data = 10; number[1].data = 20; number[2].data = 30; temp->insert(&number[0]); temp->insert(&number[1]); temp->insert(&number[2]); cout << temp->getElementCnt() << endl; cout << (temp->getItem(1))->data << endl; cout << (temp->getItem(2))->data << endl; cout << (temp->getItem(3))->data << endl; delete [] number; } #endif } //---------------------------------------------------------