欢迎来到天天文库
浏览记录
ID:17405729
大小:2.80 MB
页数:143页
时间:2018-08-31
《c++stl泛型编程ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1C++STL泛型编程(GenericProgramming)2为什么要采用泛型编程?项目中,需要用到数组、链表、字符串、栈、队列、平衡二叉树等数据结构,以及排序、搜索等算法;若全部自行编写比较麻烦;ANSIC++中包含了C++STL(StandardTemplateLibrary,标准模板库,又称C++泛型库),定义了常用的数据结构和算法,使用十分方便。有了STL,不必再从头写大多的标准数据结构和算法,并且可获得非常高的性能。但这不意味着我们不需要掌握基本数据结构与算法;相反,只有透彻理解了,才能更好的使用泛
2、型!泛型程序设计由AlexanderStepanov和DavidMusser创立,于1998年被添加进C++标准.含义:编写不依赖于具体数据类型的程序.目标:将程序写得尽可能通用.将算法从特定的数据结构中抽象出来,成为通用的.C++的模板为泛型程序设计奠定了关键的基础.STL(标准模板库,StandardTemplateLibrary)是泛型程序设计的一个范例.代码重用(reuse)!4函数模板模板函数的重载类模板堆栈类继承static成员友元模板函数模板简介5【引例】交换2个整数和交换2个浮点数的C++程序:
3、//交换2个整数voidSwap(int&a,int&b){inttmp=0;tmp=a;a=b;b=tmp;}//交换2个浮点数voidSwap(float&a,float&b){floattmp=0.0;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<4、="<5、float型数据即可。typedeffloatDateType;存在问题:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。如果程序中需要交换多种数据类型数据,怎么办?7引例#includeusingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}voidmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、"<7、unctiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector9模板工作方式模板只是说明,需要实例化后才能执行或使用.10模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp8、;}11template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.【例1】简单函数模板定义和应用.#includeusingnamespacestd;templateTM
4、="<5、float型数据即可。typedeffloatDateType;存在问题:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。如果程序中需要交换多种数据类型数据,怎么办?7引例#includeusingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}voidmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、"<7、unctiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector9模板工作方式模板只是说明,需要实例化后才能执行或使用.10模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp8、;}11template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.【例1】简单函数模板定义和应用.#includeusingnamespacestd;templateTM
5、float型数据即可。typedeffloatDateType;存在问题:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。如果程序中需要交换多种数据类型数据,怎么办?7引例#includeusingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}voidmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、"<7、unctiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector9模板工作方式模板只是说明,需要实例化后才能执行或使用.10模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp8、;}11template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.【例1】简单函数模板定义和应用.#includeusingnamespacestd;templateTM
6、"<7、unctiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector9模板工作方式模板只是说明,需要实例化后才能执行或使用.10模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp8、;}11template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.【例1】简单函数模板定义和应用.#includeusingnamespacestd;templateTM
7、unctiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector9模板工作方式模板只是说明,需要实例化后才能执行或使用.10模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp
8、;}11template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.【例1】简单函数模板定义和应用.#includeusingnamespacestd;templateTM
此文档下载收益归作者所有