A classic interview question. has a nice explanation of the idea using two stacks and its amortized time complexity.
I use the same idea in my code, which is as follows.
1 class Queue { 2 public: 3 // Push element x to the back of queue. 4 void push(int x) { 5 stack1.push(x); 6 } 7 8 // Removes the element from in front of queue. 9 void pop(void) {10 if (stack2.empty()) {11 while (!stack1.empty()) {12 int elem = stack1.top();13 stack1.pop();14 stack2.push(elem);15 }16 }17 stack2.pop();18 }19 20 // Get the front element.21 int peek(void) {22 if (stack2.empty()) {23 while (!stack1.empty()) {24 int elem = stack1.top();25 stack1.pop();26 stack2.push(elem);27 }28 }29 return stack2.top();30 }31 32 // Return whether the queue is empty.33 bool empty(void) {34 return stack1.empty() && stack2.empty();35 }36 private:37 stack stack1;38 stack stack2;39 };