#include <iostream> #include <stack> using namespace std; template <class T> class MyQueue { private : stack<T> in, out; void in_to_out(); public : MyQueue(); void push(T data); void pop(); bool empty(); T &front(); int size(); }; template <class T> MyQueue<T>::MyQueue() { } template <class T> void MyQueue<T>::in_to_out() { if( out.empty() ) { while( !in.empty() ) { out.push( in.top() ); in.pop(); } } } template <class T> void MyQueue<T>::push(T data) { in.push(data); } template <class T> void MyQueue<T>::pop() { in_to_out(); out.pop(); } template <class T> T &MyQueue<T>::front() { in_to_out(); return out.top(); } template <class T> bool MyQueue<T>::empty() { return in.empty() || out.empty(); } template <class T> int MyQueue<T>::size() { return in.size() + out.size(); } int main() { MyQueue<int> a; int i; for(i=0; i<10; i++) a.push(i); for(i=0; i<10; i++) { cout<<a.front()<<' '<<a.size()<<endl; a.pop(); } return 0; } -