自訂類模板 實現Queue

來源:互聯網
上載者:User

#include "stdafx.h"<br />#include <iostream><br />using namespace std;<br />// 錯誤的例子<br />//template <class T> class ListItem;<br />//template <class T> class List {<br />//public:<br />//List<T> ();<br />//List<T> ( const List<T>& );<br />//List<T>& operator = (const List<T>&);<br />//<br />//~List();<br />//<br />//void insert(ListItem* ptr, T value_);<br />//ListItem *find(T value_);<br />//<br />//private:<br />//ListItem *front;<br />//ListItem *end;<br />//};<br />template <class Type><br />class QueueItem {<br />public:<br />QueueItem(const Type &t) : item(t), next(0) {}<br />Type item;<br />QueueItem *next;<br />};<br />template <class Type><br />class Queue {<br />public:<br />Queue() : head(0),tail(0) {}<br />Queue(const Queue &Q):head(0), tail(0) {<br />copy_elems(Q);<br />}<br />template <class Type2> // 這裡重新聲明的目的是為了支援類型轉換<br />Queue<Type>& operator=(const Queue<Type2>&);<br />~Queue() { destroy(); }<br />Type& front() { return head->item; }<br />const Type &front() const { return head->item; }<br />void push( const Type& );<br />void pop();<br />bool empty() const {<br />return head == 0;<br />}<br />private:<br />QueueItem<Type> *head;<br />QueueItem<Type> *tail;<br />void destroy();<br />void copy_elems(const Queue&);<br />};<br />template <class Type><br />void Queue<Type>::push( const Type& val)<br />{<br />QueueItem<Type> *pt = new QueueItem<Type>(val);<br />if(empty())<br />head = tail = pt;<br />else {<br />tail->next = pt;<br />tail = pt;<br />}<br />}<br />template <class Type><br />void Queue<Type>::pop()<br />{<br />QueueItem<Type>* p = head;<br />head = head->next;<br />delete p;<br />}<br />template <class Type><br />void Queue<Type>::destroy()<br />{<br />while(!empty())<br />pop();<br />}<br />template <class Type><br />void Queue<Type>::copy_elems(const Queue& orig)<br />{<br />for(QueueItem<Type>* pt = orig.head;pt;pt = pt->next)<br />push(pt->item);<br />}<br />template <class Type><br />template <class Type2> // 這裡重新聲明的目的是為了支援類型轉換<br />Queue<Type>& Queue<Type>::operator=( const Queue<Type2>& orig)<br />{<br />if((void*)this == (void*)&orig) {<br />*this;<br />}<br />Queue<Type2> tmp(orig);<br />destroy(); // delete</p><p>while(!tmp.empty())<br />{<br />push(tmp.front());<br />tmp.pop();<br />}<br />return *this;<br />}<br />int main()<br />{<br />Queue<int> qi;<br />short s = 43;<br />int i = 23;<br />qi.push(s);<br />qi.push(i);<br />Queue<float> ai;<br />ai = qi;<br />Queue<int> bi;<br />return 0;<br />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.