一个简单的 Stack 实现

stack 的特性不用多说了吧,先进后出。底层可以用 vector 或 list 实现。

#ifndef _STACK_
#define _STACK_

#include<iostream>
#include"../List/MyList.h"
using namespace std;

class StackIsEmpty{};

template<typename T>
class MyStack{
public:
    MyStack():mylist()
    {}

    ~MyStack()
    {}

    MyStack(const MyStack<T>& mystack)
    {
        mylist=mystack.mylist;
    }

    MyStack<T>& operator=(const MyStack<T>& mystack)
    {
        mylist=mystack.mylist;
    }

    void push(const T& t)
    {
        mylist.push_back(t);
    }

    void pop()throw (StackIsEmpty)
    {
        try
        {
            mylist.pop_back();
        }
        catch(ListIsEmpty&)
        {
            throw StackIsEmpty();
        }
    }

    T top()
    {
        return mylist.end()->data;
    }

    bool empty()
    {
        return mylist.empty();
    }

    size_t size()
    {
        return mylist.size();
    }

private:
    List<T> mylist;
};

#endif

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在 github 上:点我前往