今天看了primer范型编程,结合书上例子,写了个队列类 #include <iostream> #include <string> using namespace std; template <class Type> class Queue; template <class Type> class QueueItem // 节点类 { friend class Queue<Type>; QueueItem(const Type &val):data(val), next(0){} Type data; QueueItem *next; }; template <class Type> class Queue { public: Queue():head(0), tail(0){} // 构造函数 Queue(const Queue &que); // 拷贝构造函数 Queue& operator=(const Queue &que); // 重载赋值操作符 void pop(); // 去除队首元素 void push(Type val); // 队尾增加元素 Type& front(); // 取出队首元素 bool empty() const; // 判断队空 ~Queue(void); // 析构函数 private: QueueItem<Type> *head; // 指向队头 QueueItem<Type> *tail; //指向队尾 }; template <class Type> Queue<Type>::Queue(const Queue<Type> &que) { head = 0; tail = 0; for (QueueItem *temp = que.head; temp; temp = temp->next) { push(temp->data); } } template <class Type> Queue<Type>& Queue<Type>::operator =(const Queue<Type> &que) { head = 0; tail = 0; for (QueueItem *temp = que.head; temp; temp = temp->next) { push(temp->data); } return *this } template <class Type> void Queue<Type>::pop() { if (!empty()) { QueueItem<Type> *temp = head; head = head->next; delete temp; } } template <class Type> void Queue<Type>::push(Type val) { QueueItem<Type> *temp = new QueueItem<Type>(val); if (empty()) { tail = temp; head = tail; } else { tail->next = temp; tail = temp; } } template <class Type> Type& Queue<Type>::front() { return head->data; } template <class Type> bool Queue<Type>::empty() const { return head == 0; } template <class Type> Queue<Type>::~Queue() { while (!empty()) { pop(); } } void main() { string a1("我叫Bill"),b1; Queue<string> quet; quet.push(a1); quet.push("我叫Gates"); // quet.push(5); quet.pop(); b1 = quet.front(); cout << b1.c_str() << endl; }