C++标准模板库STL学习

STL是所有C++编译器和所有操作系统平台都支持的一种库,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。当然标准查模板库中的所有算法,也可以自己用C/C++来实现,只是STL已经是封装好的库,说明它的实现细节已经做过很多优化,自己写的未必会比库中的效率高,那为什么机试题中,更偏向于自己去实现算法呢?主要是考察我们对语言的使用技巧及对常用算法原理的理解。

上机题中,一般都侧重于考察C语言的使用熟练程度,C语言也是跨平台的,因为更底层一些,因为C的执行效率和程序占用空间小,所以C语言经常用在嵌入式程序设计中。很少看到有同学用C++标准模板库来实现的,其实题目中没有要求不能使用C++标准模板库,采用C++ STL可以大大的节省时间,因为STL中已经封装好很多常用的算法,可以直接拿过来用,像sort排序等

前面用过vector容器和sort排序,这些都是STL中的,vector很容易实现动态数组,而不会像以前C语言中实现动态数组要先分配空间,最后要释放空间这么麻烦,vector容器对这些细节已经封装好,对用户是透明的,这些细节不用管

下面是自己用标准模板库中的容器——栈来实现字符串四则运算的实现,例如:输入"1+4*5-8/3",输出结果是19

这题最常用的方法就是用栈来实现,下面是示例代码:

#include <iostream>
#include <stack>
using namespace std;


//不带括号的四则运算,如果带括号,操作符的优先级就有'='
//比较两个操作符的优先级
char optCompare(char a,char b){
	if(a=='+' || a=='-'){
		if(b=='+' || b=='-'){
			return '>';
		}else{
			return '<';
		}
	}else{//如果a是*/,那么b无论是什么操作符,都是>
		return '>';
	}
}

int compute(int x,char optr,int y){
	int ret;
	switch(optr){
		case '+':
			ret=x+y;
			break;
		case '-':
			ret=x-y;
			break;
		case '*':
			ret=x*y;
			break;
		case '/':
			ret=x/y;
			break;
	}
	return ret;
}
//测试栈
void main(){
	stack<int> dat;//运算数栈
	stack<char> optr;//运算符栈
	string str="1+4*5-8/3";
	for(int i=0;i!=str.size();i++){
		if(str[i]>='0' && str[i]<='9'){
			dat.push((int)str[i]-48);//将字符转成数字进栈
		}else{
			if(optr.empty()){
				optr.push(str[i]);
			}else{
				if(optCompare(optr.top(),str[i])=='<'){
					optr.push(str[i]);
				}else{//栈顶元素优先权高,退栈并将运算结果入栈
					int a=dat.top();
					dat.pop();
					int b=dat.top();
					dat.pop();
					dat.push(compute(b,optr.top(),a));
					optr.pop();
					optr.push(str[i]);
				}
			}
		}
	}
	while(optr.empty()==false){//计算最终结果
		int a=dat.top();
		dat.pop();
		int b=dat.top();
		dat.pop();
		dat.push(compute(b,optr.top(),a));
		optr.pop();
	}
	cout<<"the result is "<<dat.top()<<endl;
}

当然这题也可以自己定义栈的数据结构来实现,显然直接使用stack容器要简便的多

下面参考资料详细节绍了C++标准模板库,以便以后用的时候查阅

1.http://www.sgi.com/tech/stl/    //STL官网,可以直接查API函数
2.http://net.pku.edu.cn/~yhf/UsingSTL.htm

3.http://morningspace.51.net/resource/stlintro/stlintro.html

4.http://blog.csdn.net/zlgrj1986/article/details/2252787

5.http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html

6.http://www.vckbase.com/document/viewdoc/?id=1461

7.http://www.linuxsir.org/bbs/showthread.php?threadid=86454     //Linux上的C++ STL标准模板库简介

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值