两个栈实现队列的功能

//用两个栈实现队列的功能
//假设有两个栈s1与s2,则s1保存刚刚入队的元素,若需出队且s2为空,则将s1所有元素压入s2(此时s2中元素顺序为元素入队顺序),然后取出s2栈顶即可,若s2非空(此时s2中元素为s1之前压入,其栈顶就是最早入队的元素),则直接取出s2的栈顶。
template<class T> class MyQueue
{
    stack<T> s1,s2;
public:
    MyQueue(){}
    int size()
    {
        return s1.size()+s2.size();
    }
    bool empty()
    {
        if(size()==0)return true;
        else return false;
    }
    void push(T value)
    {
        s1.push(value);
    }
    T front()
    {
        if(!s2.empty())
        {
            return s2.top();
        }
        else
        {
            while(!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
            return s2.top();
        }
    }
    void pop()
    {
        if(!s2.empty())
        {
            s2.pop();
        }
        else
        {
            while(!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
            s2.pop();
        }
    }
};
原文地址:https://www.cnblogs.com/Vae1990Silence/p/4396930.html