3.5 Implement a MyQueue class which implements a queue using two stacks.
template <typename T>
class MyQueue {
private:
stack<T> oldest, newest;
void shiftStacks() {
if (oldest.empty()) {
while (!newest.empty()) {
oldest.push(newest.top());
newest.pop();
}
}
}
public:
bool empty() const {
return oldest.empty() && newest.empty();
}
size_t size() const {
return oldest.size() + newest.size();
}
const T& front() {
shiftStacks();
return oldest.top();
}
void push(const T &x) {
newest.push(x);
}
void pop() {
shiftStacks();
oldest.pop();
}
};