欢迎来到天天文库
浏览记录
ID:37934597
大小:214.00 KB
页数:12页
时间:2019-06-03
《011模板与STL》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C/C++教程作者:晁军云模板与STL模板与STL11.函数模板12.类模板33.MFC模板73.1.CArray数组模板73.2.CList列表模板83.3.CMap映射模板94.标准模板库(StandardTemplateLibrary)104.1.介绍104.2.容器(Container)104.3.迭代器(Iterator)114.4.算法114.5.l示例111.函数模板函数模板是用类型做参数,设计出的通用的函数。其定义形式为:template函数返回类型函数名(函数参数表){//函数模板定义
2、}其中template表示定义的是模板,<>里是模板的类型参数,可以是一个或多个。函数模板的返回值类型可以是普通类型,也可以是模板参数表中指定的类型。函数参数表给出的类型可以是普通类型,也可以是模板参数表中指定的类型。在模板参数表中指明的类型参数不必都用于函数参数表中。例如:templateTmax(Ta,Tb){returna>b?a:b;}在上例中,如果用一个普通类类型来实例化该函数模板,那么T应该重载”>”运算符。例:inti1=1,i2=9;charc1='a',c2='b';intiRet=Max(i1,i2
3、);//调用Max(int,int)类型可以省略charcRet=Max(c1,c2);//调用Max(char,char)cout<TFunc(Tt){returnt;}templateintFunc(inti,Tt){returni*t;}函数模板表示了一组相同的函数,这些函数之间(包括重载的函数模板),以及这些函数与其他同名的普通函数之间是重载的
4、关系。这些重载函数之间的匹配规则如下:l若某一函数的参数正好与调用函数所使用的参数匹配,则调用该函数;否则按照2执行;l如果从相应的模板所生成的某个函数,其参数正好与调用函数的参数匹配,调用时使用从模板实例化生成的函数,否则执行3;l调用模板实例化生成的函数时,从不进行隐式的类型转换;l若明确指定了函数模板的类型参数,则调用相应的模板实例化后生成的函数,如果需要,编译器会进行隐式类型转换;char,short->int->long->float->double例:intMax(inti1,inti2){cout<<"NormalMax"<5、dl;returni1>i2?i1:i2;}templateMax(Tt1,Tt2){cout<<"TemplateMax,sizeof(t1):"<t2?t1:t2;}intmain(intargc,char*argv[]){inti1=1,i2=9;charc1='a',c2='b';intiRet=Max(i1,i2);//调用普通函数intMax(inti1,inti2)charcRet=Max(c1,c2);//调用模板实例化生成的charMax(chara,cha6、rb)intiRet2=Max(c1,c2);//调用模板实例化生成的charMax(chara,charb),//最后将返回值隐式转换成int型charcRet2=Max(i1,c1);//调用模板实例化生成的charMax(chara,charb),return0;}第12页C/C++教程作者:晁军云1.类模板类模板的主要用途是实现包容类,如集合、链表等。虽然模板的功能很大程度上可以通过宏实现,但是模板带有类型信息,编译器可以进行类型检查,而且具有更好的通用型。类模板的定义形式为:template7、...classTn>class类模板名{//类模板定义}其中template是C++关键字,表示是对模板进行定义。tempalte后的<>里是模板的参数,参数可以有一个或多个,每个参数用class关键字修饰,并用逗号格开。class关键字也可以用基本数据类型代替。在类模板实例化时,T可以是任意类型。接下来的关键字class说明模板是类模板,后面紧接的是类模板名。例如:由于类模板中T是一个类型参数,不是实际的类型,因此,不能由它直接生成实例对象。为类模板中的类型参数指定具体类型的过程叫做类模板的实例化,类模板实例化的结果是类,而不是对象。实例化8、类模板的一般形式为:类模板名<具体类型表>比如上面的:typedefTStackCStackChar;typedefTStack
5、dl;returni1>i2?i1:i2;}templateMax(Tt1,Tt2){cout<<"TemplateMax,sizeof(t1):"<t2?t1:t2;}intmain(intargc,char*argv[]){inti1=1,i2=9;charc1='a',c2='b';intiRet=Max(i1,i2);//调用普通函数intMax(inti1,inti2)charcRet=Max(c1,c2);//调用模板实例化生成的charMax(chara,cha
6、rb)intiRet2=Max(c1,c2);//调用模板实例化生成的charMax(chara,charb),//最后将返回值隐式转换成int型charcRet2=Max(i1,c1);//调用模板实例化生成的charMax(chara,charb),return0;}第12页C/C++教程作者:晁军云1.类模板类模板的主要用途是实现包容类,如集合、链表等。虽然模板的功能很大程度上可以通过宏实现,但是模板带有类型信息,编译器可以进行类型检查,而且具有更好的通用型。类模板的定义形式为:template7、...classTn>class类模板名{//类模板定义}其中template是C++关键字,表示是对模板进行定义。tempalte后的<>里是模板的参数,参数可以有一个或多个,每个参数用class关键字修饰,并用逗号格开。class关键字也可以用基本数据类型代替。在类模板实例化时,T可以是任意类型。接下来的关键字class说明模板是类模板,后面紧接的是类模板名。例如:由于类模板中T是一个类型参数,不是实际的类型,因此,不能由它直接生成实例对象。为类模板中的类型参数指定具体类型的过程叫做类模板的实例化,类模板实例化的结果是类,而不是对象。实例化8、类模板的一般形式为:类模板名<具体类型表>比如上面的:typedefTStackCStackChar;typedefTStack
7、...classTn>class类模板名{//类模板定义}其中template是C++关键字,表示是对模板进行定义。tempalte后的<>里是模板的参数,参数可以有一个或多个,每个参数用class关键字修饰,并用逗号格开。class关键字也可以用基本数据类型代替。在类模板实例化时,T可以是任意类型。接下来的关键字class说明模板是类模板,后面紧接的是类模板名。例如:由于类模板中T是一个类型参数,不是实际的类型,因此,不能由它直接生成实例对象。为类模板中的类型参数指定具体类型的过程叫做类模板的实例化,类模板实例化的结果是类,而不是对象。实例化
8、类模板的一般形式为:类模板名<具体类型表>比如上面的:typedefTStackCStackChar;typedefTStack
此文档下载收益归作者所有