利用 STL 中的 stack

在上一篇中我们讲了如何用栈的基本构架。

但在实战中,或者算法竞赛中,往往利用已经封装好的 “stack” 库来使用栈,毕竟,bug往往就产生在你觉得OK的代码之上。

stack中有6中基本操作:

①bool empty();

        如果当前堆栈为空,empty() 函数 返回 true 否则返回false.

②void pop();

        pop() 函数移除堆栈中最顶层元素。

③void push( const TYPE &val );

        push() 函数将 val 值压栈,使其成为栈顶的第一个元素。

④size_type size();

        size() 函数返当前堆栈中的元素数目。

⑤TYPE &top();

        top() 函数返回对栈顶元素的引用。

⑥“==” “<=” “>=” “<” “>” "!="

        所有的这些操作可以被用于栈. 相等指栈有相同的元素并有着相同的顺序。

根据这些,我们可以很容易的写出逆波兰表达式的代码:

#include
#include //引入stack容器 
using namespace std;



//字符串转换为数字 
int trans(string s)
{
	int sum=0;
	for(unsigned int i=0; i s; 
	
	string temp;
	int a,b;
	while(cin>>temp)
	{
		if(temp=="+")
		{
			a=s.top();s.pop();
			b=s.top();s.pop();
			s.push(a+b);
		}
		else if(temp=="-")
		{
			a=s.top();s.pop();
			b=s.top();s.pop();
			s.push(b-a);
		}
		else if(temp=="*")
		{
			a=s.top();s.pop();
			b=s.top();s.pop();
			s.push(a*b);
		}
		else//那就是数字了
		{
			int num=trans(temp);//把字符串变成数字
			s.push(num);
		}	
	}
	cout<

运行结果:

利用 STL 中的 stack_第1张图片

要注意一点,top()是返回栈顶元素,只是返回,

所以一般情况下,top()后面要跟着个pop(),pop()是用来弹出栈顶元素。

Over.

你可能感兴趣的:(ACM,数据结构)