StaticStack
生活随笔
收集整理的這篇文章主要介紹了
StaticStack
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 棧的順序?qū)崿F(xiàn)
- 1.1 示意圖
- 1.2 StaticStack設(shè)計(jì)要點(diǎn)
- 1.3 繼承關(guān)系圖
- 1.4 接口實(shí)現(xiàn)
- 2 代碼實(shí)現(xiàn)
1 棧的順序?qū)崿F(xiàn)
1.1 示意圖
1.2 StaticStack設(shè)計(jì)要點(diǎn)
類模板:
- 使用原生數(shù)組作為棧的存儲(chǔ)空間。
- 使用模板參數(shù)決定棧的最大容量。
1.3 繼承關(guān)系圖
1.4 接口實(shí)現(xiàn)
2 代碼實(shí)現(xiàn)
StaticStack.h
#ifndef STATICSTACK_H #define STATICSTACK_H#include "Stack.h" #include "Exception.h"namespace LemonLib { template <typename T, int N> class StaticStack : public Stack<T> { protected:T m_sapce[N];int m_top;int m_size;public:StaticStack(){m_top = -1;m_size = 0;}void push(const T& e){if (m_size < N){m_sapce[m_top + 1] = e; //之所以這里不直接m_space++是為了異常安全,防止賦值的過程中出現(xiàn)異常m_top++;m_size++;}else{THROW_EXCEPTION(InvalidOperationException, "No space in current stack...");}}int capacity() const{return N;}void pop(){if (m_size > 0){m_top--;m_size--;}else{THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");}}T top() const{if (m_size > 0){return m_sapce[m_top];}else{THROW_EXCEPTION(InvalidOperationException, "No element in current stack...");}}void clear(){m_top = -1;m_size = 0;}int size() const{return m_size;} }; }#endif // STATICSTACK_Hmain.cpp:
#include <iostream> #include "StaticStack.h"using namespace std; using namespace LemonLib;int main() {StaticStack<int, 5> stack;try{stack.pop();}catch (const Exception& e){cout << e.message() << endl;cout << e.location() << endl;}for (int i=0; i<5; i++){stack.push(i);}while (stack.size()){cout << stack.top() << endl;stack.pop();}return 0; }總結(jié)
以上是生活随笔為你收集整理的StaticStack的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核对设备树的处理
- 下一篇: LinkStack