【C++】一篇文章带你深入了解stack、queue 和 priority

慈云数据 6个月前 (05-14) 技术支持 40 0

在这里插入图片描述

目录

  • 一、stack的介绍使用
    • 1.1 stack的介绍
    • 1.2 stack的使用
      • 1.2.1.1 [stack对象的构造](https://legacy.cplusplus.com/reference/stack/stack/stack/)
      • 1.2.1.2 stack对象的容量操作
        • 1.2.1.2.1 [empty()函数](https://legacy.cplusplus.com/reference/stack/stack/empty/)
        • 1.2.1.2.2 [size()函数](https://legacy.cplusplus.com/reference/stack/stack/size/)
        • 1.2.1.3 stack对象的增删查改及访问
          • 1.2.1.3.1 [push()函数](https://legacy.cplusplus.com/reference/stack/stack/push/)
          • 1.2.1.3.2 [pop()函数](https://legacy.cplusplus.com/reference/stack/stack/pop/)
          • 1.2.1.3.3 [top()函数](https://legacy.cplusplus.com/reference/stack/stack/top/)
          • 1.3 stack的模拟实现
            • 1.3.1 stack中 push 和 pop 的实现
            • 1.3.2 stack中 empty 、size 和 top 的实现
            • 1.3.3 stack 实现汇总及函数测试
            • 二、queue的介绍和使用
              • 2.1 queue的介绍
              • 2.2 queue的使用
                • 2.2.1 [queue的构造函数](https://legacy.cplusplus.com/reference/queue/queue/queue/)
                • 2.2.2 queue对象的容量操作
                  • 2.2.2.1 [empty()函数](https://legacy.cplusplus.com/reference/queue/queue/empty/)
                  • 2.2.2.2 [size()函数](https://legacy.cplusplus.com/reference/queue/queue/size/)
                  • 2.2.3 queue对象的增删查改及访问
                    • 2.2.3.1 [push()函数](https://legacy.cplusplus.com/reference/queue/queue/push/)
                    • 2.2.3.2 [pop()函数](https://legacy.cplusplus.com/reference/queue/queue/pop/)
                    • 2.2.3.3 [front()函数](https://legacy.cplusplus.com/reference/queue/queue/front/)
                    • 2.2.3.4 [back()函数](https://legacy.cplusplus.com/reference/queue/queue/back/)
                    • 2.3 queue的模拟实现
                      • 2.3.1 queue中 push 和 pop 的实现
                      • 2.3.2 queue中 empty 和 size 的实现
                      • 2.3.3 queue中 front 和 back 的实现
                      • 2.3.4 queue 实现汇总及函数测试
                      • 三、priority_queue的介绍和使用
                        • 3.1 priority_queue的介绍
                        • 3.2 priority_queue的使用
                          • 3.2.1 [priority_queue的构造函数](https://legacy.cplusplus.com/reference/queue/priority_queue/priority_queue/)
                          • 3.2.2 priority_queue对象的容量操作
                            • 3.2.2.1 [empty()函数](https://legacy.cplusplus.com/reference/queue/priority_queue/empty/)
                            • 3.2.2.2 [size()函数](https://legacy.cplusplus.com/reference/queue/priority_queue/size/)
                            • 3.2.3 priority_queue对象的增删查改及访问
                              • 3.2.3.1 [push()函数](https://legacy.cplusplus.com/reference/queue/priority_queue/push/)
                              • 3.2.3.2 [pop()函数](https://legacy.cplusplus.com/reference/queue/priority_queue/pop/)
                              • 3.2.3.3 [top()函数](https://legacy.cplusplus.com/reference/queue/priority_queue/top/)
                              • 3.3 priority_queue的模拟实现
                                • 3.3.1 priority_queue 中 向上调整函数 和 向下调整函数 的实现
                                • 3.3.2 priority_queue 中 无参构造函数 和 迭代器区间构造函数的实现
                                • 3.3.3 priority_queue 中 push 和 pop 的实现
                                • 3.3.4 priority_queue 中 empty 、size 和 top 的实现
                                • 3.3.5 priority_queue 实现汇总及函数测试
                                • 四、容器适配器
                                  • 4.1 什么是适配器
                                  • 4.2 STL标准库中stack和queue的底层结构
                                  • 4.3 deque的简单介绍
                                    • 4.3.1 deque的原理介绍
                                    • 4.3.2 deque的缺陷
                                    • 4.4 为什么选择deque作为stack和queue的底层默认容器
                                    • 结尾

                                      一、stack的介绍和使用

                                      1.1 stack的介绍

                                      stack的介绍文档

                                      1. stack是一种容器适配器,专门用在具有LIFO(后进先出)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
                                      2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出
                                      3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类。
                                      4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。

                                      1.2 stack的使用

                                      1.2.1.1 stack对象的构造

                                      stack();   构造空栈
                                      

                                      在这里插入图片描述


                                      1.2.1.2 stack对象的容量操作

                                      1.2.1.2.1 empty()函数
                                      bool empty() const;		判断是否为空
                                      
                                      int main()
                                      {
                                      	stack st;
                                      	cout 
                                      	stack
                                      		st.push(i);
                                      	}
                                      	cout 
                                      	stack
                                      		st.push(i);
                                      	}
                                      	return 0;
                                      }
                                      
                                          template
                                          public:
                                              void push(const T& x)
                                              {
                                                  _con.push_back(x);
                                              }
                                              void pop()
                                              {
                                                  _con.pop_back();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      };
                                      
                                          template
                                          public:
                                              T& top()
                                              {
                                                  return _con.back();
                                              }
                                              const T& top()const
                                              {
                                                  return _con.back();
                                              }
                                              size_t size()const
                                              {
                                                  return _con.size();
                                              }
                                              bool empty()const
                                              {
                                                  return _con.empty();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      };
                                      
                                          template
                                          public:
                                              stack()
                                              {}
                                              void push(const T& x)
                                              {
                                                  _con.push_back(x);
                                              }
                                              void pop()
                                              {
                                                  _con.pop_back();
                                              }
                                              T& top()
                                              {
                                                  return _con.back();
                                              }
                                              const T& top()const
                                              {
                                                  return _con.back();
                                              }
                                              size_t size()const
                                              {
                                                  return _con.size();
                                              }
                                              bool empty()const
                                              {
                                                  return _con.empty();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      };
                                      void test_Stack()
                                      {
                                          aj::stack
                                              cout 
                                      	queue
                                      	queue
                                      	queue
                                      		q.push(i);
                                      	}
                                      	cout 
                                      	queue
                                      		q.push(i);
                                      	}
                                      	return 0;
                                      }
                                      
                                      	queue
                                      		q.push(i);
                                      	}
                                      	q.pop();
                                      	q.pop();
                                      	return 0;
                                      }
                                      
                                      	queue
                                      		q.push(i);
                                      	}
                                      	while (!q.empty())
                                      	{
                                      		cout 
                                          template
                                          public:
                                              void push(const T& x)
                                              {
                                                  _con.push_back(x);
                                              }
                                              void pop()
                                              {
                                                  _con.pop_front();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      }
                                      
                                          template
                                          public:
                                              size_t size()const
                                              {
                                                  return _con.size();
                                              }
                                              bool empty()const
                                              {
                                                  return _con.empty();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      }
                                      
                                          template
                                          public:
                                              T& back()
                                              {
                                                  return _con.back();
                                              }
                                              const T& back()const
                                              {
                                                  return _con.back();
                                              }
                                              T& front()
                                              {
                                                  return _con.front();
                                              }
                                              const T& front()const
                                              {
                                                  return _con.front();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      }
                                      
                                          template
                                          public:
                                              queue()
                                              {}
                                              void push(const T& x)
                                              {
                                                  _con.push_back(x);
                                              }
                                              void pop()
                                              {
                                                  _con.pop_front();
                                              }
                                              T& back()
                                              {
                                                  return _con.back();
                                              }
                                              const T& back()const
                                              {
                                                  return _con.back();
                                              }
                                              T& front()
                                              {
                                                  return _con.front();
                                              }
                                              const T& front()const
                                              {
                                                  return _con.front();
                                              }
                                              size_t size()const
                                              {
                                                  return _con.size();
                                              }
                                              bool empty()const
                                              {
                                                  return _con.empty();
                                              }
                                          private:
                                              Container _con;
                                          };
                                      }
                                      void test_Queue()
                                      {
                                          aj::queue
                                              cout 
                                      	priority_queue
                                      	string s("Love");
                                      	priority_queue
                                      	priority_queue
                                      	priority_queue
                                      		pq.push(i);
                                      	}
                                      	return 0;
                                      }
                                      
                                      	priority_queue
                                      		pq.push(i);
                                      	}
                                      	while (!pq.empty())
                                      	{
                                      		cout 
                                          template
                                          public:
                                              bool operator()(const T& x1, const T& x2)
                                              {
                                                  return x1 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon