#include <iostream>
#include <queue>
#include <stack>
using namespace std;
template <typename T> class CQueue
{
public:
CQueue(){}
~CQueue(){}
void push(const T& val);
const T& pop();
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T> void CQueue<T>::push(const T& val)
{
stack1.push(val);
}
template <typename T> const T& CQueue<T>::pop()
{
T val;
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
if(!stack2.empty())
{
val = stack2.top();
stack2.pop();
}
else
{
val = -1;
}
return val;
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
CQueue<int> myque;
for(int& val: a)
{
myque.push(val);
}
for(unsigned i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
cout<<myque.pop()<<" ";
}
return 0;
}