兩個隊列模擬棧
只要保證一個棧爲空就行
入棧直接往不爲空的那個隊列入隊即可
出棧時將不爲空的隊列留下一個,剩下全部入隊到另一個隊列中,然後彈出剩下的那個元素
#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;
}