前言:在C++17标准下,栈(stack)和队列(queue)作为STL容器适配器,通过封装底层序列容器(默认deque)实现了严格的数据结构约束:栈遵循LIFO原则仅开放push/pop/top操作,队列遵循FIFO原则限定front/back访问。其实现核心在于模板参数推导机制(CTAD)和适配器模式,通过限制底层容器的接口来保证数据结构纯度,同时支持用户选择list等替代实现以优化特定场景性能,如高频插入删除时采用list可避免deque的内存块重组开销,这种设计使STL既保持了抽象统一性又提供了底层调优的灵活性。
目录
一、栈:Stack
栈的结构我们在数据结构初阶就已经有过初步的了解了,这里我们主要来了解stl下的stack的使用以及文档。
C++ 标准模板库(STL)中关于 stack容器适配器相关知识,主要可以分为以下三个部分:
成员函数:stack自身定义的操作接口。
如:构造、判空、获取大小、访问 / 操作栈顶等,是直接操作栈的基础。
非成员函数重载:为stack适配的外部函数重载,拓展交互场景。
如:比较、IO 等运算符
非成员类特化:针对stack特性,对通用模板类做特化,适配泛型体系 。
如:哈希、仿函数适配等
具体如下图:

在C++STL容器中,为我们提供了 Stack 的接口函数,与 list、Vector、string类似,直接实例化使用即可,下面我们来学习 Stack 的常用接口:
top
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stack>
int main()
{
std::stack<int> mystack;
mystack.push(10);
mystack.push(20);
mystack.top() -= 5;
std::cout << "现在栈顶的元素是:" << mystack.top() << '\n';
return 0;

push/pop/empty
// stack::push/pop
#include <iostream>
#include <stack>
int main()
{
std::stack<int> mystack;
for (int i = 0; i < 5; ++i)
{
mystack.push(i);
}
std::cout << "从栈中弹出元素..." << std::endl;
while (!mystack.empty())
{
std::cout << mystack.top() << ' ';
mystack.pop();

最低0.47元/天 解锁文章
781

被折叠的 条评论
为什么被折叠?



