目录
- 一、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的介绍文档
- stack是一种容器适配器,专门用在具有LIFO(后进先出)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
- stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
- stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类。
- 标准容器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