成員變數 | 描 述 |
---|---|
stackArray | 指向整數陣列的 unique_ptr 獨佔指標。當建構函式執行時,它使用 stackArray 動態分配陣列的儲存 |
capacity | 一個儲存棧的大小的整數。這是棧最多可以儲存的元素的個數,而不是當前棧中元素的最大值 |
Top | 用來標記棧頂的整數。它指定將被新增到棧的下一個專案的位置 |
成員函數 | 描 述 |
---|---|
建構函式 | 該類別建構函式將接受一個整數引數,該引數指定了棧的大小。這個大小的整數陣列被動態分配儲存並賦值給 stackArray。另外,變數 top 被初始化為 0,表示棧當前為空 |
push | push 函數接受一個整數引數,該引數將被壓入棧頂 |
pop | pop 函數使用一個整數參照形參。棧頂部的值被刪除並複製到參照形參中 |
isEmpty | 如果棧為空則返回 true,否則返回 false。top 設定為 0 時則棧為空 |
注意,即使建構函式會動態地為棧陣列分配儲存,但是它仍然被視為一個順序棧,因為一旦分配完畢,該棧的大小就不能改變。
該類的程式碼顯示如下://IntStack.h 的內容 #include <memory> using namespace std; class IntStack { unique_ptr<int[]>stackArray; int capacity; int top; public: // Constructor IntStack(int capacity); // Member functions void push(int value); void pop (int &value); bool isEmpty() const; // Stack Exceptions class Overflow {}; class Underflow {}; };除了表 2 中描述的棧成員之外,IntStack 類還定義了兩個名為 Overflow 和 Underflow 的內部類,用作棧異常。
throw InstStack::Overflow();
而 pop 函數則可以執行以下語句:throw IntStack::Underflow();
該語句通知程式發生了下溢異常。預設情況下,當程式的任何部分丟擲異常時,程式將終止並顯示錯誤訊息。這個預設行為可以通過一個被稱為捕獲異常的進程來改變。//IntStack.cpp 的內容 #include "intstack.h" IntStack::IntStack(int capacity) { stackArray = make_unique<int[]>(capacity); this->capacity = capacity; top = 0; } void IntStack::push(int value) { if (top == capacity) throw IntStack::Overflow(); stackArray[top] = value; top++; } bool IntStack::isEmpty() const { return top == 0; } void IntStack::pop(int &value) { if (isEmpty()) throw IntStack::Underflow(); top--; value = stackArray[top]; }
// This program illustrates the IntStack class. #include "intstack.h" #include <iostream> using namespace std; int main() { IntStack stack(5); int values[] = { 5, 10, 15, 20, 25 }; int value; cout << "Pushing. . . n"; for (int k = 0; k < 5; k++) { cout << values[k] << " "; stack.push(values[k]); } cout << "nPopping. . .n"; while (!stack.isEmpty()) { stack.pop(value); cout << value << " "; } cout << endl; return 0; }程式輸出結果:
Pushing. . .
5 10 15 20 25
Popping. . .
25 20 15 10 5