- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机学院 计算机网络与信息安全研究室 张荣博 第9章 模板与泛型编程 教学目标 了解泛型编程的概念及形式。 模板的概念 提出问题 解决方法 分析问题 模板的定义 模板本质上就是参数化多态,是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。 模板可以分为两类: 函数模板 类模板 函数模板与模板函数 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 声明方法: template class T //模板声明 T max (T x, T y) //定义函数模板 { return (xy)? x:y; } 例题 #includeiostream using namespace std; template class T T max (T x, T y) { return (xy)? x:y;} void main() { int i=10,j=56; float x1=50.34f,x2=56.34f; double y1=673.36,y2=465.972; coutThe max of i,j is:max(i,j)endl; coutThe max of x1,y1 is:max(x1,x2)endl; coutThe max of x2,y2 is:max(y1,y2)endl; } 函数模板小结 类模板与模板类的概念 类模板:一个类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型。它的存在不代表一个具体的、实际的类,而是代表一类的类,是类的集合。 类模板的使用 类模板的使用。类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为: 类名 实际的类型 对象名; int main() { classnamefloat obj; obj.SetValue(1.0); float tmp = obj.GetValue(); } 链表类模板的定义 模板、类、对象、函数之间的关系 群体的概念 群体是指由多个数据元素组成的集合体。群体可以分为两个大类:线性群体和非线性群体。 线性群体中的元素按位置排列有序 (数组)。 非线性群体不用位置顺序来标识元素(链表)。 容器 容器的接口 通用容器运算符 ==,!=,,=,,=,= 方法(函数) 迭代方法( 指针的移动 ) begin(),end(),rbegin(),rend() 访问方法 size(),max_size(),swap(),empty() 适配器与迭代器 适配器是一种接口类(栈适配器) 为已有的类提供新的接口。 目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合。 算法与函数对象 C++标准模板库中包括70多个算法 其中包括查找算法,排序算法,消除算法,记数算法,比较算法,变换算法,置换算法和容器管理等等。 顺序容器——向量 向量属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问) 向量是动态结构,它的大小不固定,可以在程序运行时增加或减少。 向量是应用较多的STL容器。 课程小结 泛型编程的思想 类模板与模版类 函数模版与模版函数 STL技术 本节作业 迭代器是面向对象版本的指针,它们提供了访问容器、序列中每个元素的方法 函数对象 一个行为类似函数的对象,它可以没有参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。 例题:求范围2~N中的质数,N在程序运行时由键盘输入。 //10_1.cpp #include iostream #include iomanip #include vector //包含向量容器头文件 using namespace std ; int main() { vectorint A(10); int n; int index = 0, i, j; cout“ 请输入上限数字 ; cin n; A[index++] = 2; for(int i = 3,j=0; i n; i++) { if ( index == A.size()) A.resize( index + 10); if (i % 2 == 0) continue; j = 3; while (j = i/2 i % j != 0) j += 2; if (j i/2) A[index++] = i; } //输出质数 for ( i =
原创力文档


文档评论(0)