今天很好的兴志,一下子写了二篇文章,当然也不吝啬第三篇了。
- STL概述
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
- STL仿真函数
函数的仿真通俗的讲就是给需要实现的函数换一个名称,但归根结底函数的地址是不变的。因此就有了函数指针的仿真方式,接下来我先介绍一下函数指针仿真的实现方法。
#include "iostream.h" #define N 100 void array_in(int n,float x[]); float average(int n,float x[]); float max(int n,float x[]); float min(int n,float x[]); void main() { int i,n;float x[N]; char *str[3]={"average","max","min"}; float (*fun[3])(int n,float x[])={average,max,min}; cout<<"n=";cin>>n; array_in(n,x); for(i=0;i<3;i++) cout<<str[i]<<"="<<(*fun[i])(n,x)<<endl; } |
函数指针虽然能达到函数仿真的效果,但是有个缺陷,就是忽略了函数的状态。如下通过STL方式进行仿真的实现代码。
#include<iostream.h> Template<class T> Struct plus{ Plus() {flag = 1;} T operator()(const T& x,const T& y) const { Cout << “flag = “ <<endl; return x + y; } Int flag; }; Test Int main() { cout << plus<int>(12,45)<<endl; Return 0; } |
- STL仿真函数的好处
1、增强程序的可靠性和健壮性。
2、增强函数的灵活性和自控性。