//--------------------------------------------------------- // ÇÁ·Î±×·¥: 2Â÷ ¹æÁ¤½Ä ±Ù ±¸Çϱâ. C++ class ÀÌ¿ë // ³¯ Â¥: quard_equ_class.cpp // ÆÄ ÀÏ: 2004-10-23 ~ // ÇÔ ¼ö: // ¼³ ¸í: Ŭ·¡½º¸¦ Ȱ¿ëÇØ¼­ ´Ù½Ã Çѹø Ç®¾î º¸ÀÚ. // Àú ÀÚ: ±èÁø¼ö // ȯ °æ: winxp 2.4c ram 1g bcc5.5 // ±â Ÿ: // ¼ö Á¤: //--------------------------------------------------------- #include using namespace std; //--------------------------------------------------------- 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); friend ostream &operator<<(ostream &os,const T &d); }; //--------------------------- template Container::Container() { // Linked list¸¦ ÃʱâÈ­ ÇÏÀÚ. head = new T; tail = new T; head->next = tail; tail->next = tail; // ÀúÀåµÇ¾îÀÖ´Â °´Ã¼ÀÇ °³¼ö 0 cnt = 0; head->data = NULL; } //--------------------------- template Container::~Container() { T *del; cur = head->next; while(cur != tail) { // Container ¿¡ »õ·ÎÀÌ Ãß°¡µÈ list ¸Þ¸ð¸® ÇØÁ¦... del = cur; cur = cur->next; delete del; } 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; return; } for(int i=1 ; cur != tail ; i++) { if( i == idx) // idx ¹øÂ° °´Ã¼¸¦ »èÁ¦ ÇÑ´Ù. { pre->next = cur->next; delete cur; cnt--; break; } pre = cur; cur = cur->next; } } //--------------------------- template T *Container::getItem(int idx) { cur = head->next; // ¾Æ¹«·± °´Ã¼°¡ ÀúÀåÀÌ ¾ÈµÇÀְųª // ÀúÀåµÈ °´Ã¼ º¸´Ù Å« ¹øÈ£ÀÇ »èÁ¦¸¦ ¿ä±¸ ÇÒ¶§... ¿¡·¯. if(idx <= 0 || idx > cnt) { 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; // return *head; // } for(int i=1 ; cur != tail ; i++) { if( i == idx) // idx ¹øÂ° °´Ã¼¸¦ »èÁ¦ ÇÑ´Ù. { return *cur; } cur = cur->next; } return *head; } //--------------------------- template ostream &operator<<(ostream &os,T &d) { if(d.data != NULL) os << d.data; return os; } //--------------------------------------------------------- struct node { int data; struct node *next; }; //--------------------------------------------------------- void main() { // 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; cout << temp[4].data << endl; cout << endl; cout << temp[1] << endl; cout << temp[2] << endl; cout << temp[3] << endl; cout << temp[4] << endl; } //---------------------------------------------------------