std::queue

来源:互联网 发布:elasticsearch golang 编辑:程序博客网 时间:2024/06/07 01:00

http://classfoo.com/ccby/article/DMS8D

std::queue

  1. // <queue>
  2. template < class T, class Container = deque<T> > class queue;

队列(Queue)是一个容器适配器(Container adaptor)类型,被特别设计用来运行于FIFO(First-in first-out)场景,在该场景中,只能从容器一端添加(Insert)元素,而在另一端提取(Extract)元素。

模板参数

T

容器所包含的元素的类型。

在类模板内部,使用其别名为 value_type 的成员类型。

Container

底层的用于存储元素的容器的类型。

详细说明

  • queue 通常被实现为容器适配器,即使用一个特定容器类的封装对象作为它的底层容器。queue 提供了一系列成员函数用于操作它的元素,只能从容器“后面”压进(Push)元素,从容器“前面”提取(Pop)元素。

    用来实现队列的底层容器必须满足顺序容器的所有必要条件。同时,它还必须提供以下语义的成员函数:

    • front()
    • back()
    • push_back()​
    • pop_front()

    满足上述条件的标准容器有 std::deque 及 std::list,如果未特别指定 queue 的底层容器,标准容器 std::deque 将被使用。

    Any sequence container supporting operations front(), back(), push_back() and pop_front() can be used to instantiate queue. In particular, list and deque can be used.

    C++编程语言国际标准:ISO/IEC 14882:2011

  • 成员类型

    成员类型定义value_type第一个模板参数 Tcontainer_type第二个模板参数 Containersize_typeContainer::size_typereferenceContainer::referenceconst_referenceContainer::const_reference
  • 成员函数

    (constructor)创建 queue(destructor)释放 queueoperator=赋值操作

    Element access:

    front访问第一个元素back访问最后一个元素

    Capacity:

    empty判断是否为空size返回有效元素个数

    Modifiers:

    push在容器末端插入元素pop移除容器顶部的元素emplace C++11在容器末端构造并插入元素swap交换容器的内容
  • 非成员函数

    operator==、operator!=、operator<、operator<=、operator>、operator>= 

    关系操作符std::swap交换两个队列的内容
  • 代码示例

    下面这个例子简单地介绍了 queue 的常用使用方法:

    1. #include <iostream>
    2. #include <queue>
    3.  
    4. namespace ClassFoo {
    5. void QueueExample1() {
    6. std::queue<int> foo1;
    7.  
    8. std::cout << "foo1.empty():" << std::boolalpha
    9. << foo1.empty() << std::endl;
    10.  
    11. // 逐个压入元素
    12. std::cout << "压入四个元素:" << std::endl;
    13. foo1.push(1);
    14. std::cout << foo1.back() << " ";
    15. foo1.push(2);
    16. std::cout << foo1.back() << " ";
    17. foo1.push(3);
    18. std::cout << foo1.back() << " ";
    19. foo1.push(4);
    20. std::cout << foo1.back() << " " << std::endl;
    21.  
    22. std::cout << "foo1.empty():" << std::boolalpha
    23. << foo1.empty() << std::endl;
    24. std::cout << "foo1.size():"
    25. << foo1.size() << std::endl;
    26.  
    27. // 逐个弹出元素
    28. std::cout << "弹出四个元素:" << std::endl;
    29. std::cout << foo1.front() << " ";
    30. foo1.pop();
    31. std::cout << foo1.front() << " ";
    32. foo1.pop();
    33. std::cout << foo1.front() << " ";
    34. foo1.pop();
    35. std::cout << foo1.front() << " " << std::endl;
    36. foo1.pop();
    37.  
    38. std::cout << "foo1.empty():" << std::boolalpha
    39. << foo1.empty() << std::endl;
    40. std::cout << "foo1.size():"
    41. << foo1.size() << std::endl;
    42. }
    43. }
    44. int main ()
    45. {
    46. ClassFoo::QueueExample1();
    47. return 0;
    48. }

    输出

    foo1.empty():true
    压入四个元素:
    1 2 3 4 
    foo1.empty():false
    foo1.size():4
    弹出四个元素:
    1 2 3 4 
    foo1.empty():true
    foo1.size():0​


0 0
原创粉丝点击