欢迎来到天天文库
浏览记录
ID:59488569
大小:471.50 KB
页数:86页
时间:2020-09-13
《第九章群体类和群体数据的组织ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章群体类和群体数据的组织C++语言程序设计说明目录群体的概念群体是指由多个数据元素组成的集合体。群体可以分为两个大类:线性群体和非线性群体。线性群体中的元素按位置排列有序,可以区分为第一个元素、第二个元素等。非线性群体不用位置顺序来标识元素。线性群体中的元素次序与其位置关系是对应的。在线性群体中,又可按照访问元素的不同方法分为直接访问、顺序访问和索引访问。…第一个元素第二个元素第三个元素最后一个元素群体类直接访问群体--数组类顺序访问群体--链表类栈类队列类群体数据的组织插入排序选择排序交换排序顺序查找折半查找本章主要内容模板群体类群体数据的组织小结与复
2、习建议59.1模板C++最重要的特性之一就是代码重用,为了实现代码重用,代码必须具有通用性。通用代码需要不受数据类型的影响,并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C++支持参数化程序设计的工具,通过它可以实现参数化多态性。所谓参数化多态性,就是将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象。函数模板类模板9.1.1函数模板函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。定义方法:template<模板参数表>函数定义template3、>Tabs(Tx){returnx<0?-x:x;}8其中:template为模板关键字。模板参数表中的类型为参数化类型,也称可变类型,类型名为class(或typename);模板参数表中的类型也可包含普通类型。求绝对值函数的模板#includeusingnamespacestd;templateTabs(Tx){returnx<0?-x:x;}intmain(){intn=-5;doubled=-5.5;cout<4、5求绝对值函数的模板分析编译器从调用abs()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为int型,所以推导出模板中类型参数T为int。当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数:intabs(intx){returnx<0?–x:x;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax5、(Tx,Ty){return(x>y)?x:y;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax(Tx,Ty){return(x>y)?x:y;}上例代码中的max(i,c)和max(f,i),由于模板函数在调用时其参数类型不同,所以编译器报错。欲解决上述问题,可用一普通函数重载函数模板,此时,只需声明该普通函数的接口即可。请看下述示例代码:tem6、plate//函数模板的定义Tmax(Tx,Ty){return(x>y)?x:y;}doublemax(double,double);//重载上述函数模板,重载时只需给出函数接口该函数的作用是比较两个字符串指针,而不是比较两个指针所指向的字符串的内容,这与我们所定义的函数模板的语义相违背。因此,此时须提供一个可以替换该函数模板实例的函数,用来替换的函数称为特定的模板函数,即:char*max(char*c1,char*c2){return(strcmp(c1,c2))?(c1):(c2);}9.1.2类模板的作用使用类模板使用户可以为类声明7、一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型的和用户自定义类型)。类模板:template<模板参数表>class类名{类成员声明}如果需要在类模板以外定义其成员函数,则要采用以下的形式:template<模板参数表>类型名类名<模板参数标识符列表>::函数名(参数表)类模板的声明templateclassStoreT&Store::getElem()例9-2类模板应用举例#include#includeusingnamespacestd;/8、/结构体StudentstructStudent{i
3、>Tabs(Tx){returnx<0?-x:x;}8其中:template为模板关键字。模板参数表中的类型为参数化类型,也称可变类型,类型名为class(或typename);模板参数表中的类型也可包含普通类型。求绝对值函数的模板#includeusingnamespacestd;templateTabs(Tx){returnx<0?-x:x;}intmain(){intn=-5;doubled=-5.5;cout<4、5求绝对值函数的模板分析编译器从调用abs()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为int型,所以推导出模板中类型参数T为int。当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数:intabs(intx){returnx<0?–x:x;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax5、(Tx,Ty){return(x>y)?x:y;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax(Tx,Ty){return(x>y)?x:y;}上例代码中的max(i,c)和max(f,i),由于模板函数在调用时其参数类型不同,所以编译器报错。欲解决上述问题,可用一普通函数重载函数模板,此时,只需声明该普通函数的接口即可。请看下述示例代码:tem6、plate//函数模板的定义Tmax(Tx,Ty){return(x>y)?x:y;}doublemax(double,double);//重载上述函数模板,重载时只需给出函数接口该函数的作用是比较两个字符串指针,而不是比较两个指针所指向的字符串的内容,这与我们所定义的函数模板的语义相违背。因此,此时须提供一个可以替换该函数模板实例的函数,用来替换的函数称为特定的模板函数,即:char*max(char*c1,char*c2){return(strcmp(c1,c2))?(c1):(c2);}9.1.2类模板的作用使用类模板使用户可以为类声明7、一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型的和用户自定义类型)。类模板:template<模板参数表>class类名{类成员声明}如果需要在类模板以外定义其成员函数,则要采用以下的形式:template<模板参数表>类型名类名<模板参数标识符列表>::函数名(参数表)类模板的声明templateclassStoreT&Store::getElem()例9-2类模板应用举例#include#includeusingnamespacestd;/8、/结构体StudentstructStudent{i
4、5求绝对值函数的模板分析编译器从调用abs()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为int型,所以推导出模板中类型参数T为int。当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数:intabs(intx){returnx<0?–x:x;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax
5、(Tx,Ty){return(x>y)?x:y;}函数模板的重载C++规定:函数模板可以重载。它既可以用函数模板重载,也可以用普通函数重载。之所以允许重载是因为函数模板的参数T在实例化时实参类型无隐式转换功能。下面是函数模板重载的实例:template//求两个同类型T的变量中的最大者Tmax(Tx,Ty){return(x>y)?x:y;}上例代码中的max(i,c)和max(f,i),由于模板函数在调用时其参数类型不同,所以编译器报错。欲解决上述问题,可用一普通函数重载函数模板,此时,只需声明该普通函数的接口即可。请看下述示例代码:tem
6、plate//函数模板的定义Tmax(Tx,Ty){return(x>y)?x:y;}doublemax(double,double);//重载上述函数模板,重载时只需给出函数接口该函数的作用是比较两个字符串指针,而不是比较两个指针所指向的字符串的内容,这与我们所定义的函数模板的语义相违背。因此,此时须提供一个可以替换该函数模板实例的函数,用来替换的函数称为特定的模板函数,即:char*max(char*c1,char*c2){return(strcmp(c1,c2))?(c1):(c2);}9.1.2类模板的作用使用类模板使用户可以为类声明
7、一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型的和用户自定义类型)。类模板:template<模板参数表>class类名{类成员声明}如果需要在类模板以外定义其成员函数,则要采用以下的形式:template<模板参数表>类型名类名<模板参数标识符列表>::函数名(参数表)类模板的声明templateclassStoreT&Store::getElem()例9-2类模板应用举例#include#includeusingnamespacestd;/
8、/结构体StudentstructStudent{i
此文档下载收益归作者所有