《c++ primer》模版例子实现
/*********************************************************************************************/
// QueueItem类为容器的一个元素,为一个私有类。 Item:保存的值 next:下一个容器元素地址
template <class T> class Queue;
template <class T> class QueueItem
{
private:
friend class Queue<T>;
QueueItem(const T &t):Item(t), next(0) {};
T Item;
QueueItem *next;
};
// Queue类实现单向链表容器
template <class T> class Queue
{
public:
Queue():head(0), tail(0) { }
Queue(const Queue &):head(0), tail(0) { copy_elems();}
Queue& operator=(const Queue &);
~Queue(){ destroy(); }
void push(const T &);
void pop();
bool empty() const;
void Q_printf();
private:
QueueItem<T> *head;
QueueItem<T> *tail;
void destroy();
void copy_elems(const Queue &);
};
template <class T> bool Queue<T>::empty() const
{
return head == 0;
}
template <class T> void Queue<T>::push(const T &q)
{
QueueItem<T> *qi = new QueueItem<T>(q);
if(empty())
{
head = tail = qi;
}
else
{
tail->next = qi;
tail = qi;
}
/*
QueueItem<T> qi(q);
if(empty())
{
head = tail = &qi;
}
else
{
tail->next = &qi;
tail = &qi;
}
*/
}
template <class T> void Queue<T>::pop()
{
QueueItem<T> *p = head;
head = head->next;
delete p;
}
template <class T> void Queue<T>::destroy()
{
while(!empty())
{
pop();
}
}
template <class T> void Queue<T>::copy_elems(const Queue &Q)
{
for(QueueItem<T> *i = Q.head; i; i = i->next)
{
Queue.push(i->Item);
}
}
template <class T> void Queue<T>::Q_printf()
{
for(QueueItem<T> *i = head; i; i = i->next)
{
printf("valuse:%d\n", i->Item);
}
}
/*********************************************************************************************/
int main(int argc,char **argv)
{
Queue<int> *q = new Queue<int>();
int i = 11;
short s = 22;
q->push(i);
q->push(s);
q->Q_printf();
system("pause");
return 0;
}