通過對簡單棧的基本實現代碼進行分析瞭解加深對棧的實現和功能的印象。
template <typename T> //模板類的使用
class miniStack //類的定義
{
public:
miniStack(); //定義棧
void push(const T &item); //向棧內輸入數據(入棧)
void pop(); //刪除棧內元素
T &top();
const T &top() const;
bool empty() const; //判空
int size() const; //棧的元素個數
private:
vector<T> stackVector; //私有變量,直接引用vector
};
template <typename T> // 模板類每一個函數前都要有的
miniStack<T>::miniStack() // 定義棧
{
}
template <typename T>
void miniStack<T>::push(const T &item)
{
stackVector.push_back(item); //向棧內輸入數據,利用vector的push_back()函數直接輸入
}
template <typename T>
void miniStack<T>::pop() //刪除調用
{
if (empty()) //判空拋錯
throw underflowError("miniStack pop(): stack empty");
stackVector.pop_back(); //調用pop_back刪除最後一個
}
template <typename T>
T &miniStack<T>::top()
{
if (empty()) //判空拋錯
throw underflowError("miniStack top(): stack empty");
return stackVector.back(); //vector::back的用法是輸出數組裏最後一個元素
}
template <typename T>
bool miniStack<T>::empty() const
{
return stackVector.size() == 0; //判斷棧的大小
}
template <typename T>
int miniStack<T>::size() const //輸入棧的空間大小size
{
return stackVector.size();
}