两个队列模拟栈
只要保证一个栈为空就行
入栈直接往不为空的那个队列入队即可
出栈时将不为空的队列留下一个,剩下全部入队到另一个队列中,然后弹出剩下的那个元素
#include <queue>
template<class T>
class Stack {
public:
void push(const T & elem);
void pop();
private:
std::queue<int> m_q1;
std::queue<int> m_q2;
};
template<class T>
void Stack<T>::push(const T & elem)
{
if (0 == m_q1.size()) {
m_q2.push(elem);
}
else if (0 == m_q2.size()) {
m_q1.push(elem);
}
}
template<class T>
void Stack<T>::pop()
{
if (0 == m_q1.size()) {
if (0 != m_q2.size()) {
while (1 < m_q2.size()) {
m_q1.push(m_q2.front());
m_q2.pop();
}
m_q2.pop();
}
}
else if (0 == m_q2.size()) {
if (0 != m_q1.size()) {
while (1 < m_q1.size()) {
m_q2.push(m_q1.front());
m_q1.pop();
}
m_q1.pop();
}
}
}
int main() {
Stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.pop();
s.pop();
s.pop();
return 0;
}