/** * 两个栈实现一个队列 * 栈IN用做入列,栈OUT用做出列 * push: * 栈IN执行push操作 * pop: * 如果栈OUT不为空,执行pop操作 * 如果栈OUT为空,将栈IN所有元素依次pop并push到栈OUT。 */ #include <stack> #include <iostream> using namespace std; template<typename TYPE> class Queue { public: void push(const TYPE& a_data) { IN.push(a_data); } TYPE front() { if (!OUT.empty()) { return OUT.top(); } else { while (!IN.empty()) { OUT.push(IN.top()); IN.pop(); } return OUT.top(); } } void pop() { if (!OUT.empty()) { OUT.pop(); } else { while (!IN.empty()) { OUT.push(IN.top()); IN.pop(); } OUT.pop(); } } private: stack<TYPE> IN; stack<TYPE> OUT; }; int main() { Queue<int> myQueue; for (int i=0; i<10; i++) { myQueue.push(i); } for (int i=0; i<10; i++) { cout << myQueue.front() << endl; myQueue.pop(); } return 0; }
