c++ primer 模版例子实现

 

《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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值