Queueテンプレートクラス

3509 ワード

#include using namespace std; /* */ template class Queue; /* */ template ostream & operator< &q); /* , , */ template class QueueItem { friend class Queue; friend ostream& operator<< (ostream &os,const Queue&q); QueueItem(const Type &t):item(t),next(0){} Type item; QueueItem *next; }; /* */ template class Queue{ friend ostream& operator<< (ostream &os,const Queue&q); public: Queue():head(0),tail(0){ cout<item; } const Type &front()const { return head->item; } int size() { int size=0; QueueItem *p=head; while(p) { p=p->next; size++; } return size; } private: QueueItem *head; QueueItem *tail; void destroy(); void copy_elems(const Queue&); }; /* */ template void Queue::destroy() { while(!empty()) pop(); } template void Queue::pop() { QueueItem *p=head; head=head->next; delete p; } template void Queue::push(const Type &val) { QueueItem *p=new QueueItem(val); if(empty()) head=tail=p; else { tail->next=p; tail=p; } } /* */ template void Queue::copy_elems(const Queue &orig) { for(QueueItem *p=orig.head;p;p=p->next) push(p->item); } template Queue & Queue::operator =(const Queue &rhs) { destroy(); copy_elems(rhs); cout< ostream & operator< &q) { os< *p; for(p=q.head;p;p=p->next) { os<item<"; return os; } int main(){ Queue q; q.push(1); q.push(2); q.push(3); q.push(4); Queue p; p=q; Queue r(p); cout< #include #include using namespace std; template class Queue; template ostream & operator< & val); template class Queue{ friend ostream &operator<< (ostream &os,const Queue &val); public: Queue() { if(debug==1) cout<l=rhs.l; } if(debug==1) cout< Queue(It beg,It end); template void Assign(It beg,It end); private: list l; const static int debug=0; }; /* */ template template void Queue::Assign(It beg,It end) { l.assign(beg,end); } /* */ template template Queue::Queue(It beg, It end) { l.assign(beg,end); } template ostream &operator< & q) { os<::const_iterator it=q.l.begin(); while(it!=q.l.end()) os<"; return os; } int main(){ Queue q; q.push(1); q.push(2); q.push(3); q.push(4); cout< p(q); Queue r; r=q; cout<(a,a+4); cout<