C++ STL中stack的成员函数

本文介绍了C++STL中的stack类及其成员函数,如push()、pop()等,展示了如何使用它们在整型栈中实现后进先出(LIFO)的数据结构特性。
摘要由CSDN通过智能技术生成

C++ STL中stack的成员函数

stack 改变了另一种容器(如 deque、 list 或 vector)的行为,通过限制元素插入或删除的方式实现
其功能,从而提供严格遵守栈机制的行为特征。表 24.1 解释了 stack 类的公有成员函数并演示了如何
将这些函数用于整型栈。

函数 描述
push() 在栈顶插入元素 numsInStack.push (25);
pop() 删除栈顶的元素 numsInStack.pop ( );
empty() 检查栈是否为空并返回一个布尔值 if (numsInStack.empty ( )) DoSomething ( );
size() 返回栈中的元素数 size_t numElements = numsInStack.size ( );
top() 获得指向栈顶元素的引用 cout << "Element at the top = " << numsInStack.top ( );

如表 24.1 所示, stack 的公有成员函数只提供了这样的方法,即插入或删除元素的位置符合栈的行
为特征。也就是说,虽然底层容器可能是 deque、 vector 或 list,但禁用了这些容器的有些功能,以实
现栈的行为特征。

程序清单 24.2 演示了如何使用 push( )和 pop( )在栈中插入和删除元素。
程序清单 24.2 使用整型 stack

0: #include <stack>
1: #include <iostream>
2:
3: int main ()
4: {
5: using namespace std;
6: stack <int> numsInStack;
7:
8: // push: insert values at top of the stack
9: cout << "Pushing {25, 10, -1, 5} on stack in that order:" << endl;
10: numsInStack.push (25);
11: numsInStack.push (10);
12: numsInStack.push (-1);
13: numsInStack.push (5);
14:
15: cout << "Stack contains " << numsInStack.size () << " elements" << endl;
16: while (numsInStack.size () != 0)
17: {
18: cout << "Popping topmost element: " << numsInStack.top() << endl;
19: numsInStack.pop (); // pop: removes topmost element
20: }
21:
22: if (numsInStack.empty ()) // true: due to previous pop()s
23: cout << "Popping all elements empties stack!" << endl;
24:
25: return 0;
26: }

输出:
Pushing {25, 10, -1, 5} on stack in that order:
Stack contains 4 elements
Popping topmost element: 5
Popping topmost element: -1
Popping topmost element: 10

Popping topmost element: 25
Popping all elements empties stack!
分析:
该示例首先使用 stack::push( )将一些值插入到整型 stack numsInStack 中,如第 10~13 行所示;然
后使用 stack::pop( )从 stack 中删除元素。 stack 只允许访问栈顶元素,可使用成员 stack::top( )访问栈顶
元素,如第 18 行所示。使用 stack::pop( )可每次从 stack 中删除一个元素,如第 19 行所示。第 19 行所
属的 while 循环确保不断执行 pop( )操作,直到 stack 为空。从元素弹出的顺序可知,最后插入的元素
最先弹出,这说明了 stack 的典型 LIFO(后进先出)特征

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值