// 使用2个栈实现队列,栈是一种先进后出的结构,队列是一种先进先出的结构;
// 可以利用栈的特点,使用2个栈,在入栈时将数据加入栈1;在出栈时,判断栈2是否为空
// 如果为空,则先将栈1中的元素弹出,压入栈2,然后从栈2弹栈。
#include<iostream>
#include<stack>
using namespace std;
template <typename T>
class MyQueue {
public:
T Pop ()
{
if (m_stack2.empty()) {
while (!m_stack1.empty()) {
T elem = m_stack1.top();
m_stack1.pop();
m_stack2.push(elem);
}
}
if (m_stack2.empty()) {
throw "queue is null ";
}
T elem = m_stack2.top();
m_stack2.pop();
return elem;
}
void Push (const T& element)
{
m_stack1.push(element);
}
private:
stack<T> m_stack1;
stack<T> m_stack2;
};