利用模板實現Stack

2021-07-31 06:34:22 字數 3021 閱讀 4009

說起stack,可能很多人都寫過,但是這是我第一次寫,而且出錯率特別高;

那麼首先看看什麼是stack;

棧stack是乙個「先進後出」的容器;

a、棧是只能在某一端插入和刪除的特殊線性表。

b、先堆進來的壓在底下,隨後乙個乙個往上堆。取走時,只能從上面乙個乙個取。讀和取都在頂部進行,底部一般是不動的。

c、棧就是一種類似桶堆積物品的資料結構,進行刪除和插入的一端稱棧頂,另一端稱棧底。插入一般稱為進棧,刪除則稱為退棧。 棧也稱為後進先出表。

以下是我對於此次**的分析和總結;

1).h檔案

定義模板類:

template

t>

class

stack{};

定義類的私有的成員變數:

t* _pdata;//指向棧頂

size_t _size; //找當前的大小

size_t _capacity; // 棧總的大小

對於stack,我們要完成它以下的幾個功能:

stack();

stack(const stack& s);

stack& operator=(const stack& s);

void push(const t& data);

void pop();

bool empty()const;

t& top();

size_t size()const;

~stack();

上面這些功能都很好實現,但是你對於其中有乙個功能的實現讓我很頭疼,這就是checkcapacity():

void checkcapacity()    //檢查記憶體是否分配夠,不夠時擴充套件記憶體

delete pcur; //刪除舊空間

_capacity = newcapacity;

//_pdata=_pdata+_size;//這句話的出現和建構函式的不要重複}}

以下是建構函式的實現:

//初始化列表時不要把 _pdata(pdata)寫成_pdata=pdata

stack(size_t size)

:_pdata(null)

,_size(size)

,_capacity(10)

}

析構函式的實現:

~stack()             //析構函式

}

拷貝建構函式:

stack(const stack

& s) //拷貝建構函式

}

賦值運算子過載的實現:

stack& operator=(const stack& s) //賦值運算子過載

return *this;

}

進棧:

void push(const t& data)

出棧:

void pop()        //出棧

訪問棧頂:

t& top( ) //訪問棧頂

判空:

bool empty()const

//判空

棧中實際元素個數:

size_t size()const

//棧得到大小

和棧實際分配記憶體空間:

size_t capacity

()

銷毀棧:

bool destroystack()

返回棧中的元素:

t& get()

列印棧中的所有元素:

void print()//輸出

cout

<< endl;

}

2).cpp檔案

為什麼我要發測試**,就是有時候可能會在類外使用物件呼叫類的室友成員變數:

s是我定義的乙個物件

s. _pdata;//指向棧頂

s. _size; //找當前的大小

s. _capacity; // 棧總的大小

向這樣的寫法是完全錯誤的,在測試**中呼叫類的私有成員是不被允許的,所以最好在類中定義函式在獲取他們 t& get()和getsize()等。

以下是我的測試**:

int size=0

; stacks(size);

s.push(1);

s.push(2);

s.push(3);

s.push(4);

s.push(5);

s.push(6);

s.push(7);

s.push(8);

s.size();

s.pop();

s.print();

s.top();

stacks1(size);

s1=s;

cout<.size>

s1.print();

s1.pop();

cout<.size>

s1.print();

stacks2(s);

cout<.size>

s2.print();

那麼以下是我執行的結果:

Stack與Queue的實現(c 模板實現)

include include using namespace std template 類模板 class stack void pop void push t temp int size int main void include include using namespace std temp...

C 利用模板實現佇列

這個 的實現主要使用了類模板以及模板函式,友元,成員模板以及成員模板函式。這裡需要注意的時,類的成員函式在實現的時候必須滿足以下幾點 1 必須以template開始,後接模板形參表 2 必須指出是那個類成員 3 類名必須包含模板形參 具體的格式如下 templatereturn type queue...

利用excel模板實現快速的匯出

專案中利用的框架是springboot,實現便捷開發。下面是部分 從controller中匯出功能 檔名稱 string filename exprot.xls 內容 mapbean new hashmap suppresswarnings unchecked listtax taxinformat...