- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
01-向量
数 据 结 构主讲:姜晓睿01-向量抽象数据型抽象数据型 ?数据结构 (手册) (实现)抽象数据型ADT: Abstract Data Type数据模型 + 一组操作抽象定义 逻辑特性 操作语义/不考虑存储及实现方式 数据结构对ADT的实现:语言+存储+算法 具体实现 内部表示 完整算法 多种实现 存储机制 and 时间复杂度向量操作功能操作功能size()向量大小(元素总数)find(e)寻找目标元素eget(r)获取秩为r的元素ordered()判断向量元素是否有序put(e,r)将秩为r的元素替换成esort()向量元素按非降序排列insert(e,r)将元素e在秩为r处插入remove(r)将秩为r的元素删除search(e)在有序向量中查找元素euniquify()提出重复元素向量是(一维)数组的泛化数组A:A[i] = A + i ? s — 线性数组 — 直接访问向量V:一组元素按照线性次序封装而成向量元素的秩(rank) ? 数组元素的下标 //call-by-rank向量支持泛型 ? 定制复杂数据结构 //VectorTree* forest;向量ADT接口(操作)向量ADT实例插曲1:函数模板所谓模板,其实就是一种使用“数据类型”作为参数来产生一系列函数或类的机制。模板是C++支持多态性的一种工具。模板将用“类型参数”来完成不同的功能templatetypename TT max(T x, T y){ return xy ? x : y ;}int max(int x, int y){ return xy ? x : y ;}char max(char x, char y){ return xy ? x : y ;}double max(double x, double y){ return xy ? x : y ;}void main(){ int x = 7; int y = 4; coutmax(x,y)endl; double a = 3.5; double b = 4.5; coutmax(a,b)endl;}插曲2:函数模板函数模板语法格式:template typename T1, typename T2, … 类型名 函数名(参数表){ 函数体的定义}注意:函数模板是一组函数的描述,它需要实例化为模板函数后才能执行。函数模板并不是一个实实在在的函数。编译系统不会为它产生任何执行代码。函数模板的声明和实现放在同一文件内模板函数内有遇到某类运算时,类型T需支持此类运算void main() { Complex c1(3,7), c2(2,3); cout max(c1,c2) endl;} int operator(Complex c1, Complex c2) { if(c1.getReal()c2.getReal()) return 1; else if ...}插曲3:模板参数推导编译器根据调用max()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式max(x, y),由于实参x和y为int型,所以推导出模板中类型参数T为int。又如,对于调用表达式max(a, b),由于实参a和b为double型,所以推导出模板中类型参数T为double。当类型参数T的含义确定后,编译器将以函数模板为样板生成一个函数:如int max(int x, int y) {又如 double max(double a, double b) { return xy ? x : y; return xy ? x : y; } }在实例化函数模板时,必须能够通过上下文环境为一个模板实参决定一个唯一的类型或值。如果不能决定出这个唯一的类型或值,就会产生编译时错误。如 max(7,100.0); 类模板 类模板产生的类 类的对象类模板、类及对象的关系插曲4:类模板类模板的语法格式: template typename T1, typename T2, … class 类名 { 类成员声明 }声明一个Point类模板 template class T class Point { T x, y; public: Point(T=0 , T=0); Point(Point); T calcDistance(Point); };插曲5:Point类模板Point类模板定义template class TPointT::Point(T a, T b):x(
文档评论(0)