C++之Queue

来源:互联网 发布:淘宝网商城摩托车 编辑:程序博客网 时间:2024/05/22 15:05

转自:http://hi.baidu.com/nicker2010/item/a53293f1810ee8cea935a2eb

本文介绍STL Queue.
    Queue(也称FIFO,即先进先出)的声明如下:
    template<typename _Tp, typename _Sequence = deque<_Tp> >
    class queue;

    第一个template代表元素类型
    第二个template代表stack内部存放元素所用的实际容器,缺省用deque

    实际上,Queue只是很单纯的把各项操作转换为内部容器的对应调用。下面是部分源代码:
    protected:
      _Sequence c;  ////实际容器
    public:
      bool empty() const { return c.empty(); }
      size_type size() const { return c.size(); }
      reference front()
      {
        __glibcxx_requires_nonempty();
        return c.front();
      }
      const_reference front() const
      {
        __glibcxx_requires_nonempty();
        return c.front();
      }
      reference back()
      {
        __glibcxx_requires_nonempty();
        return c.back();
      }
      const_reference back() const
      {
        __glibcxx_requires_nonempty();
        return c.back();
      }
      void push(const value_type& __x)
      { c.push_back(__x); }
      void pop()
      {
        __glibcxx_requires_nonempty();
        c.pop_front();
      }

    我们可以使用任何序列式容器来支持stack,
    只要他们支持front(),back(),push_back(),pop_front()等动作就行。
    如以list支持queue:
    std::queue<string,list<string> > stringQueue;

   核心接口:
    1.push()
    2.front()
    3.back()
    4.pop()
    5.size()
    6.empty()
    7.comparision(const queue& q1,const queue& q2) ///两个同型queue的比较,
      comparision可以是:==,!=,<,>,<=,>=
      (如果两个queue的size()相等并且对应元素也相等则它们相等;
      比较基于字典序,参考lexicographical_compare())

简单的应用:

void testSTLQueue()
{
    queue<string> stringQueue;
    stringQueue.push("These ");
    stringQueue.push("are ");
    stringQueue.push("more ");
    cout<<stringQueue.front();
    stringQueue.pop();
    cout<<stringQueue.front();
    stringQueue.pop();
    stringQueue.push("four ");
    stringQueue.push("words!");
    stringQueue.pop();

    cout<<stringQueue.front();
    stringQueue.pop();
    cout<<stringQueue.front();
    stringQueue.pop();

    cout<<"\nNumber of elements in Queue: "<<stringQueue.size()<<endl;
}


原创粉丝点击