C++之Queue

本文深入介绍了STL中的Queue容器,包括其内部实现原理、核心接口及简单应用实例。Queue是一种先进先出的数据结构,可以通过模板指定元素类型和底层容器。

转自: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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值