看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《ernieyang09 (亂入)》之銘言: : 老師出了一個作業 : 是要我們用template class寫出queue跟stack : 他沒有實際教 一寫就卡住了 : 助教給的 : template < class T > : class Queue : { : public: : Queue (int queueCapacity = 0); : bool IsEmpty(); : bool IsFull(); : void Push(); : void Pop(); : private: : T *queue; : int front; : int rear; : int capacity; : int counter; : }; : template <class T> : Queue<T>::Queue(int queueCapacity):capacity(queueCapacity)<<不懂寫法 : { : queue = new T[capacity]; <<這邊為什麼要用T還有queue跟capacity哪來 : front = rear = counter = 0; : } 嗯..這個例子用到的只是把型態當作參數, 丟給模板建一個 新類別而已, 搞不清楚的話我先寫一個只能裝 double 的佇 列給你看喔 ────────────────────────── class Queue { public: Queue (int queueCapacity = 0); bool IsEmpty(); bool IsFull(); void Push(); // 放東西進去的方法不叫push, 要接受引數 void Pop(); // 拿東西出來的方法不叫pop private: double *queue; int front; int rear; int capacity; ←────────┐ 他們在這裡被定義 int counter; ←────────┐│ }; ││ ││ Queue::Queue(int queueCapacity) ││ : capacity(queueCapacity) ││ { ││ queue = new double[capacity]; ─┼┘ front = rear = counter = 0; ─┘ } ────────────────────────────── : capactity ( ... ) 至於上面這行的用法請關鍵字「member initializer list」 前篇推文的 initialization list 其實是另一種東西 然後再比對你本來的程式碼, 除了前面都要加template、類 別名稱要加<T>以外, 剩下只有把double的地方換成 T 而已 , 這個佇列能裝的東西就變多樣了, 不過在寫模板之前, 我 還是建議你先達成以下條件 : 1.熟悉 C++的語法 2.沒有用模板的情況下, 能夠獨立寫出適合的類別來解決 問題 3.會使用 STL 的 vector(只需要會push_back、pop_back 等函式) 等你達成上面的需求, 會發現這個作業基本上也是新手問題 , 課本通常就有類似的題目跟詳解了 (不外乎Stack、Queue 、Linked List), 沒有的話請丟掉它. : 完全看不懂~"~ 不知道有沒有網站是適合超新手看的 順便可以解釋一下嗎 : (我就queue的地方看不懂 後面的都還好) : 還有題目是n個櫃檯排客人 我想到的是用struct counter把class T包起來 : 然後cin >> n 把他new counter[n] 但是似乎完全不是這樣 : 我想我是因為上面看不懂 現在整個一頭霧水不知道怎麼寫 客人排隊是先到先服務, 然後走人, 符合佇列的 FIFO性質, 如果用一個型態 Customer 來代表客人, 那麼可以這樣做 // 自訂客人的類別 struct Customer { string name; }; // 輸入客人名字 Customer customer; cin >> customer.name; // 拷貝一個客人副本放進佇列裡 Queue< Customer > queue; queue.Enqueue( customer ); -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (11/05 13:35)
ernieyang09:謝謝 我在試試看^^ 11/05 14:20