#include #include using namespace std; template class Queue { private: T elems[N+1]; int tail,head; public: Queue(); ~Queue() {cout<<"discarding Queue of "< Queue::Queue(): tail(0),head(0) { cout<<"constructing Queue of "< void Queue::enqueue(T const& x) { elems[tail++]=x; if (tail==N+1) tail=0; if (empty()) throw std::out_of_range("Queue<>::enqueue(): queue is full"); } template T Queue::dequeue() { T temp; if (empty()) throw std::out_of_range("Queue<>::dequeue(): queue is empty"); temp=elems[head++]; if (head==N+1) head=0; return temp; } Queue TenInts; Queue HundredDoubles; class Person { public: string name; int age; float gpa; }; Queue FiftyPersons; Queue TenVoidPtrs; int main() { int i,*k; Person p,*q; for (i=0;i<10;i++) TenInts.enqueue(i); for (i=0;i<10;i++) if (i!=TenInts.dequeue()) throw std::out_of_range("Queue<>::dequeue(): incorrect value"); if (TenInts.empty()) cout<<"TenInts works"<::dequeue(): incorrect value"); if (HundredDoubles.empty()) cout<<"HundredDoubles works"<::dequeue(): incorrect value"); } if (FiftyPersons.empty()) cout<<"FiftyPersons works"<name="Alice"; q->gpa=i; q->age=i; TenVoidPtrs.enqueue((void*) q); } for (i=0;i<5;i++) { k=(int*)TenVoidPtrs.dequeue(); if (*k!=i) throw std::out_of_range("Queue<>::dequeue(): incorrect value"); else delete k; } for (i=0;i<5;i++) { q=(Person*)TenVoidPtrs.dequeue(); if (q->name!="Alice" || q->gpa!=i || q->gpa!=i) throw std::out_of_range("Queue<>::dequeue(): incorrect value"); delete q; } if (TenVoidPtrs.empty()) cout<<"TenVoidPtrs works"<