两个栈模拟队列

按照stl的接口实现。

相关源码如下,缺少异常处理的log,但不影响使用。

#include <stack>
#include <iostream>
template< typename T>
class StackQueue {
 public:
  StackQueue() {}
  ~StackQueue() {}
  void push(const T& value) {
    last.push(value);
  }
  const T& top() {
    stack_exchange();
    if (first.size() > 0) {
      return first.top();
    }
    // empty();
  }
  bool empty() {
    return first.empty() && last.empty();
  }
  void pop() {
    stack_exchange(); 
    if (first.size() > 0) {
      first.pop();
      return;
    }
    // empty
  }
 private:
  void stack_exchange() {
    if (first.size() <= 0) {
      while (!last.empty()) {
        first.push(last.top());
        last.pop();
      }
    }
  }
  std::stack<T> first; 
  std::stack<T> last;
};
int main() {
  StackQueue<int> queue;
  int array[] = {1, 2, 3, 4, 5
  };
  size_t size = sizeof(array)/sizeof(array[0]);
  for (int i = 0; i < size; ++i) {
    queue.push(array[i]); 
  }
  while (!queue.empty()) {
    // const int& value = queue.top();
    std::cout<< queue.top()<< std::endl;
    queue.pop();
  }
}

 

posted @ 2013-08-31 12:09  westfly  阅读(223)  评论(0编辑  收藏  举报