C++的STL的stack

本文深入讲解了栈数据结构的特点和操作方式,包括后进先出原则、栈顶元素的访问和删除,以及如何使用模板实现栈。探讨了stack类的成员函数如size(), empty(), pop(), top()和push()的使用方法。
部署运行你感兴趣的模型镜像

栈是一种后进先出的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。

stack的模板

template < class T, class Cont == deque <T> >
class stack{
    ...
};

第二个参数指定实现的类型,默认是deque双端队列,也可以是vector或 list

成员函数

size()
empty()
void pop();	//弹出(即删除)栈顶元素
T & top();	//返回栈顶元素的引用。通过此函数可以读取栈顶元素的值,也可以修改栈顶元素
void push (const T & x);	//将 x 压入栈顶

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

### 使用方法 C++ STL中的`stack`提供了一系列成员函数来方便使用,其常用函数及使用方法如下: - `stack()`:构造一个空的。例如: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; // 构造一个空的存储int类型的 return 0; } ``` - `empty()`:检测是否为空,若为空则返回`true`,否则返回`false`。示例: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; if (s.empty()) { std::cout << "Stack is empty." << std::endl; } return 0; } ``` - `size()`:返回中元素的个数。示例: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; s.push(1); s.push(2); std::cout << "Stack size: " << s.size() << std::endl; return 0; } ``` - `top()`:返回元素的引用。示例: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; s.push(1); s.push(2); std::cout << "Top element: " << s.top() << std::endl; return 0; } ``` - `push()`:将元素`val`压入中。示例: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; s.push(1); s.push(2); return 0; } ``` - `pop()`:将中尾部(即)的元素弹出。示例: ```cpp #include <stack> #include <iostream> int main() { std::stack<int> s; s.push(1); s.push(2); s.pop(); std::cout << "Top element after pop: " << s.top() << std::endl; return 0; } ``` ### 特性 - **后进先出(LIFO)原则**:的最大特性就是后进先出,最后压入的元素会最先被弹出。例如,依次将元素1、2、3压入,弹出顺序则是3、2、1。 - **容器适配器**:`stack`是一种容器适配器,它不提供自己的迭代器,不能像`vector`、`list`等容器那样进行遍历。它默认使用`deque`作为底层容器,也可以使用`vector`、`list`等其他容器作为底层容器,只需要在定义时指定即可,如`std::stack<int, std::vector<int>> s`。 ### 应用场景 - **表达式求值**:在计算后缀表达式(逆波兰表达式)时,使用可以方便地进行计算。遇到操作数时将其压入,遇到运算符时从中弹出相应数量的操作数进行计算,并将结果压入。 - **函数调用**:在程序执行过程中,函数调用和返回的管理使用来实现。每次调用函数时,将当前的上下文信息(如局部变量、返回地址等)压入,函数返回时从中弹出这些信息。 - **括号匹配**:在检查代码中括号是否匹配时,可以使用。遇到左括号时将其压入,遇到右括号时从中弹出一个左括号进行匹配,如果匹配失败则说明括号不匹配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值