• C++ stack和queue


    目录

    一、stack的介绍和使用

    1.1、stack的介绍

    1.2 stack的使用

    1.3 stack的模拟实现

    二、queue的介绍和使用

    2.1 queue的介绍

    2.2 队列的使用

    2.3 queue的模拟实现


     

    一、stack的介绍和使用

    1.1、stack的介绍

    1、stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。

    2、stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

    3、stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:

    empty:判空操作

    back:获取尾部元素操作

    push_back:尾部插入元素操作

    pop_back:尾部删除元素操作

    4、标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque(双端队列)。

    1.2 stack的使用

    函数说明接口说明
    stack()构造空的栈
    empty()检测stack是否为空
    size()返回stack中元素的个数
    top()返回栈顶元素的引用
    push()将元素val压入stack中
    pop()将stack中尾部的元素弹出

    1.3 stack的模拟实现

     我在模拟实现stack栈的时候,使用的是list链表作为适配器。

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. namespace my_stack_queue
    6. {
    7. template<class T, class Con = list>
    8. class stack
    9. {
    10. public:
    11. stack()
    12. {}
    13. void push(const T& x)
    14. {
    15. _c.push_back(x);
    16. }
    17. void pop()
    18. {
    19. assert(!_c.empty());
    20. _c.pop_back();
    21. }
    22. T& top()
    23. {
    24. assert(!_c.empty());
    25. return _c.back();
    26. }
    27. const T& top()const
    28. {
    29. assert(!_c.empty());
    30. return _c.back();
    31. }
    32. size_t size()const
    33. {
    34. return _c.size();
    35. }
    36. bool empty()const
    37. {
    38. return _c.empty();
    39. }
    40. private:
    41. Con _c;
    42. };
    43. int main()
    44. {
    45. using namespace my_stack_queue;
    46. stack<int> b;
    47. b.push(1);
    48. b.push(2);
    49. b.push(3);
    50. b.push(4);
    51. b.pop();
    52. b.pop();
    53. b.pop();
    54. cout << b.size() << endl;
    55. cout << b.top() << endl;
    56. cout << b.empty() << endl;
    57. return 0;
    58. }

    二、queue的介绍和使用

    2.1 queue的介绍

    1、队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。

    2、队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

    3、底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:、

    empty:检测队列是否为空

    size:返回队列中有效元素的个数

    front:返回队头元素的引用

    back:返回队尾元素的引用

    push_back:在队列尾部入队列

    pop_front:在队列头部出队列

    4、标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

    2.2 队列的使用

    函数声明接口说明
    queue()构造空的队列
    empty()检测队列是否为空,是返回true,否则返回false
    size()返回队列中有效元素的个数
    front()返回队头元素的引用
    back()返回队尾元素的引用
    push()在队尾将元素val入队列
    pop()将队头元素出队列

    2.3 queue的模拟实现

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. namespace my_stack_queue
    6. {
    7. template<class T, class Con = list>
    8. class queue
    9. {
    10. public:
    11. queue()
    12. {}
    13. void push(const T& x)
    14. {
    15. _c.push_back(x);
    16. }
    17. void pop()
    18. {
    19. assert(!_c.empty());
    20. _c.pop_front();
    21. }
    22. T& back()
    23. {
    24. assert(!_c.empty());
    25. return _c.back();
    26. }
    27. const T& back()const
    28. {
    29. assert(!_c.empty());
    30. return _c.back();
    31. }
    32. T& front()
    33. {
    34. assert(!_c.empty());
    35. return _c.front();
    36. }
    37. const T& front()const
    38. {
    39. assert(!_c.empty());
    40. return _c.front();
    41. }
    42. size_t size()const
    43. {
    44. return _c.size();
    45. }
    46. bool empty()const
    47. {
    48. return _c.empty();
    49. }
    50. private:
    51. Con _c;
    52. };
    53. };
    54. int main()
    55. {
    56. using namespace my_stack_queue;
    57. queue<int> a;
    58. a.push(1);
    59. a.push(2);
    60. a.push(3);
    61. a.push(4);
    62. a.pop();
    63. a.pop();
    64. cout << a.size() << endl;
    65. cout << a.back() << endl;
    66. cout << a.front() << endl;
    67. cout << a.empty() << endl;
    68. return 0;
    69. }
  • 相关阅读:
    go的结构体嵌套(组合式继承)
    【UI自动化测试】Jenkins配置
    Swift 5.9 与 SwiftUI 5.0 中新 Observation 框架应用之深入浅出
    FPGA学习笔记(十三)负数运算
    spring mvc \ spring boot \ spring cloud
    MySQL数据库笔记
    有点奇怪!访问目的网址,主机能容器却不行
    ScriptableObject数据容器讲解
    ATFX汇市:美国9月PCE数据来袭,高通胀问题或已不构成威胁
    Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用
  • 原文地址:https://blog.csdn.net/qq_54178958/article/details/126407317