利用 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<iostream>
#include<stack> //引入stack容器 
using namespace std;



//字符串转换为数字 
int trans(string s)
{
	int sum=0;
	for(unsigned int i=0; i<s.length(); i++)
	{
		sum=sum*10+s[i]-'0';
	}
	return sum;
}


int main()
{
	//定义一个栈,里面的元素是int 
	stack<int> 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<<s.top()<<endl;	
	return 0;
}

运行结果:

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

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

Over.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值