预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共88页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

STL简介 1 STL简介 StandardTemplateLibrary(STL):标准模板库,更 准确的说是C++程序设计语言标准模板库。 STL是所有C++编译器和所有操作系统平台都支持 的一种库,说它是一种库是因为对所有的编译器 来说,STL提供给C++程序设计者的接口都是一样 的。(同一段STL代码在不同编译器和操作系统平 台上运行的结果都是相同的,但是底层实现可以 是不同的。) STL的使用者并不需要了解它的底层实现。 STL的目的是标准化组件,这样你就不用重新开 发它们。你可以仅仅使用这些现成的组件。 2 为什么我们需要学习STL? STL是C++的ANSI/ISO标准的一部分,可以用于所有C++ 语言编译器和所有平台(Windows/Unix/Linux..)。 STL提供了大量的可复用的模板类和算法函数。例如,程 序员再也不用自己设计排序,搜索算法了,这些都已经是 STL的一部分。 使用STL的应用程序保证了得到的实现在处理速度和内存 利用方面都是高效的,因为STL设计者们已经为我们考虑 好了。 使用STL编写的代码更容易修改和阅读。因为代码更短 了,很多基础工作代码已经被组件化了; 使用简单,虽然内部实现很复杂。 虽然,STL的优点甚多,但是STL的语法实在令初学者头 疼,许多人望而却步。 3 模板 模板是C++中实现代码重用机制的一种工具,可以 实现类型参数化,把类型定义为参数。函数模板 和类模板允许用户构造模板函数和模板类。 4 泛型编程 C++提供了两种功能强大的抽象方法:面向对象编程与泛 型编程。 泛型编程(genericProgramming)的思想精髓是基于接口编程 STL库:一组通用容器和一组操作于通用容器上的通用算 法,即泛型编程的实现品。 例如,实现一个max函数,返回两参数中的较大值,要求 可以处理多种数据类型。 intmax(inta,intb){returna>b?a:b;} doublemax(doublea,doubleb){returna>b?a:b;} stringmax(stringa,stringb){returna>b?a:b;} charmax(chara,charb){…} … 缺点:大量重复工作,扩展性差 5 函数模板 函数模板可以用来创建一个通用功能的函数,以 支持多种不同形参,进一步简化重载函数的函数 体设计。 声明方法: template<typename标识符>//可把typename换成class 函数声明 6 函数模板 C++函数 intmymax(inta,intb){ returna>b?a:b; } 类型参数 修改为函数模版 template<typenameT> Tmymax(Ta,Tb){ returna>b?a:b; } 函数模版的调用 intmain(){ cout<<mymax(3,4)<<endl; cout<<mymax(3.1,4.0)<<endl; stringa=“fzu”,b=“ds”; cout<<mymax(a,b)<<endl; } 7 类模板 一个类模板允许用户为类定义一种模式,使得类 中的某些数据成员、某些成员函数的参数、某些 成员函数的返回值,能够取任意类型(包括系统 预定义的和用户自定义的)。 声名方法 template<模板参数表> class类名 {类成员声明} 如果需要在类模板以外定义其成员函数,则要采 用以下的形式: template<模板参数表> 类型名类名<T>::函数名(参数表) 8 类模板 修改为类模板 C++类 classmyClass{template<typenameT> public:classmyClass{ intdata;public: voidoutput(){cout<<data<<endl;}Tdata; }voidoutput() {cout<<data<<endl;} } 类模版的实例化 intmain(){ myClass<int>c; c.data=1; c.output(); myClass<string>c2; c2.data=“fzu”; c2.output(); } 9 类模板推广 template<typenameT> Tmymax(Ta,Tb){ returna>b?a:b; }  template<typenameT1,typenameT2> T2mymax(T1a,T2b){ returna>b?a:b; }