欢迎来到天天文库
浏览记录
ID:49473718
大小:2.40 MB
页数:101页
时间:2020-02-07
《C++STL泛型编程1(长望班课件20140525) (1).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1C++STL泛型编程(GenericProgramming)南京信息工程大学计算机与软件学院长望程序设计竞赛班2为什么要采用泛型编程?ACM竞赛中,需要用到数组、链表、字符串、栈、队列、平衡二叉树等数据结构,以及排序、搜索等算法;若全部自行编写比较麻烦;ANSIC++中包含了C++STL(StandardTemplateLibrary,标准模板库,又称C++泛型库),定义了常用的数据结构和算法,使用十分方便。有了STL,不必再从头写大多的标准数据结构和算法,并且可获得非常高的性能。但这不意味着我们不需要掌握基本数据结构与算法;相反,只有透彻理解了,才能更好的
2、使用泛型!泛型程序设计由AlexanderStepanov和DavidMusser创立,于1998年被添加进C++标准.含义:编写不依赖于具体数据类型的程序.目标:将程序写得尽可能通用.将算法从特定的数据结构中抽象出来,成为通用的.C++的模板为泛型程序设计奠定了关键的基础.STL(标准模板库,StandardTemplateLibrary)是泛型程序设计的一个范例.代码重用(reuse)!函数模板简介4【引例】交换2个整数和交换2个浮点数的C++程序://交换2个整数voidSwap(int&a,int&b){inttmp=0;tmp=a;a=b;b=tmp
3、;}//交换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能否提供一种方法将两个函数合并,以节省开发成本?引例typedefintDataType;voidSwap(DataType&a,DataType&b){DataTypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;Swap(a,b);return0;}当需要交换两个浮点数时可以将DataType定义成float型数据即可。typedeffloatDateType;存在问题:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。如果程序中需要交换多种数据类型数据,怎么办?6引例#include5、ream>usingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、ap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?模板机制模板的概念模板是一种使用无类型参数来产生一系列函数或类的机制。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。7模板分类函数模板(functiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector8模板工作方式模板7、只是说明,需要实例化后才能执行或使用.9模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}10template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.templat8、evoidSwa
4、。函数重载5能否提供一种方法将两个函数合并,以节省开发成本?引例typedefintDataType;voidSwap(DataType&a,DataType&b){DataTypetmp;tmp=a;a=b;b=tmp;}intmain(){inta=10,b=20;Swap(a,b);return0;}当需要交换两个浮点数时可以将DataType定义成float型数据即可。typedeffloatDateType;存在问题:更改一种数据类型时,需要修改程序源代码,必须重新编译程序。如果程序中需要交换多种数据类型数据,怎么办?6引例#include5、ream>usingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、ap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?模板机制模板的概念模板是一种使用无类型参数来产生一系列函数或类的机制。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。7模板分类函数模板(functiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector8模板工作方式模板7、只是说明,需要实例化后才能执行或使用.9模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}10template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.templat8、evoidSwa
5、ream>usingnamespacestd;templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}intmain(){inta=10,b=20;floatc=1.2,d=2.4;cout<<"a="<6、ap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?模板机制模板的概念模板是一种使用无类型参数来产生一系列函数或类的机制。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。7模板分类函数模板(functiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector8模板工作方式模板7、只是说明,需要实例化后才能执行或使用.9模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}10template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.templat8、evoidSwa
6、ap函数的形式参数,作为一种无类型的参数,当使用它的时候再将它用具体的参数实现?模板机制模板的概念模板是一种使用无类型参数来产生一系列函数或类的机制。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。7模板分类函数模板(functiontemplate)是独立于类型的函数可产生函数的特定版本类模板(classtemplate)与类相关的模板,如vector可产生类对特定类型的版本,如vector8模板工作方式模板
7、只是说明,需要实例化后才能执行或使用.9模板函数模板类模板模板类模板函数对象实例化实例化实例化函数模板(functiontemplate)定义格式:template<模板参数表>类型名函数名(参数表){函数体}templatevoidSwap(T&x,T&y){Ttmp=x;x=y;y=tmp;}10template:函数模板定义关键字.<>中是函数的模板参数,参数可有一个或多个,逗号隔开。不能为空!模板参数常用形式:class标识符或者typename标识符模板参数表明函数可以接收的类型参数,可以是内部类型,也可以是自定义类型.templat
8、evoidSwa
此文档下载收益归作者所有