C 利用模板實現佇列

2021-07-05 01:50:34 字數 2421 閱讀 8737

這個**的實現主要使用了類模板以及模板函式,友元,成員模板以及成員模板函式。

這裡需要注意的時,類的成員函式在實現的時候必須滿足以下幾點:

1、必須以template開始,後接模板形參表;

2、必須指出是那個類成員;

3、類名必須包含模板形參;

具體的格式如下:

templatereturn-type queue::class_member
成員模板是類裡面有自己的類模板或者模板函式成員,為什麼要使用這個概念呢?有時候是這樣的,需要從另外乙個容器初始化另外乙個容器,這種機制可以解決這個問題。

成員模板函式在實現的時候,必須先類模板,然後才是成員自己的模板,具體格式如下:

templatetemplatevoid queue::assign(iter beg, iter end)
queue.h檔案:

#ifndef queue_h

#define queue_h 1

#include"questa.h"

/**友元類與函式**/

templateclass queue;

template ostream& operator<<(ostream&,const queue&);

/**佇列元素類**/

templateclass queueitem

friend class queue;

friend ostream& operator<< (ostream&, const queue&);

type item;

queueitem *next;

};/**佇列結構類**/

templateclass queue;

queue(const queue &q):head(0),tail(0)

queue& operator=(const queue&);

friend ostream& operator<< (ostream&,const queue&);

~queue()

type &front();

const type &front() const;

void push(const type&);

void pop();

void print();

template queue(it begin,it end):head(0),tail(0)//成員模板初始化佇列

template void assign(iter,iter);

inline bool empty() const//判斷佇列是否為空

private:

queueitem*head;

queueitem*tail;

void destroy();

void copy_elems(const queue&);

template void copy_elems(iter,iter);

};template type& queue::front()//返回隊首元素

template const type& queue::front() const//返回隊首元素,這個函式表明類引數不可更改

template void queue::pop()//刪除隊首元素,依次刪除直到隊列為空

template void queue::push(const type &val)//利用鍊錶的尾插法進行入佇列

}template void queue::copy_elems(const queue &orig)

template queue& queue::operator=(const queue& que)//佇列賦值運算子過載

template void queue::destroy()//銷毀佇列

template template void queue::copy_elems(it begin,it end)

}template template void queue::assign(iter begin,iter end)//拷貝其他型別容器元素到佇列中,需要借助於成員模板

template ostream& operator<< (ostream &os, const queue&q) //過載《運算子,輸出queue的元素

#endif

測試程式main.cpp:

#include"questa.h"

#include"queue.h"

#include"stack.h"

int main()

; queueq;

q.push(2);

q.push(3);

q.push(4);

q.push(5);

q.assign(test,test+5);

cout<

C 模板實現佇列

我準備練習一下模板的知識,然後自己實現vector類。在這之前,先用模板實現乙個佇列來熱身吧。佇列的底層是鍊錶。主要是熟悉一下模板的寫法。另外,就是模板的定義和實現都要寫在乙個檔案中 export關鍵字可以避免這樣。還沒用過 所以倒數第二行我加了個 include queue.hpp 只能是hpp,...

利用模板實現Stack

說起stack,可能很多人都寫過,但是這是我第一次寫,而且出錯率特別高 那麼首先看看什麼是stack 棧stack是乙個 先進後出 的容器 a 棧是只能在某一端插入和刪除的特殊線性表。b 先堆進來的壓在底下,隨後乙個乙個往上堆。取走時,只能從上面乙個乙個取。讀和取都在頂部進行,底部一般是不動的。c ...

C 模板實現鍊錶佇列

佇列是一種十分常見的資料結構,具有先進先出的特點.佇列在處理訊息時,非常常用.本文利用c 模板,鍊錶來實現乙個簡單的佇列.解讀如下 1.queuelinklist標頭檔案.queuelinklist私有繼承於linklist,因為做為佇列中的核心鍊錶資料結構,我們只希望其具有尾插入,頭取出的方法.採...