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(后进先出)特征