模板与标准模板库.ppt
《模板与标准模板库.ppt》由会员分享,可在线阅读,更多相关《模板与标准模板库.ppt(46页珍藏版)》请在三一办公上搜索。
1、第7章 模板与标准模板库,STL-灵活、可扩展、可重用的软件模块,上海大学机电工程与自动化学院 雷电,引言:对象管理,上海大学机电工程与自动化学院 雷电,对象管理,创建对象:占据内存使用对象:Set,Get,IO,change缓存(保存)对象:因为数据的产生与消费不同时不同步释放对象:不再占据内存内存区域:栈:自动局部变量,参变量堆:动态内存分配,只能通过指针间接访问。静态存储区:全局变量,静态变量,常数块,上海大学机电工程与自动化学院 雷电,对象管理-基于数组的方法,1.通过下标访问或遍历数组元素2.通过指针访问或遍历数组元素数组元素就是对象数组元素是对象的指针(地址),当对象个数不确定且对
2、象很大时采用此方法。1.确定的元素个数(数组长度)2.创建足够长的数组,元素个数不确定时。1)使用一个变量记录实际的元素个数2)不够时重新创建并复制原有的数据,上海大学机电工程与自动化学院 雷电,class CSame public:int type;.;例1:CSame gList2000;int N=0;。/添加新对象时的编程gList N.type=0 x100;N+;例2:CSame*gList 2000;int N=0;。/添加新对象时的编程gList N=new CSame;gList N-type=;N+;,上海大学机电工程与自动化学院 雷电,对象管理-基于链表 的方法,引言:基
3、于数组的表在需要更灵活的处理方法时是不够的.,如一个定票系统.数组是一种定长结构,内存顺序存放.数组优点是访问一个元素方便,但在中间插入删除元素和变长操作严重影响性能.好的方案是:动态内存分配元素(结点).这些元素(结点),在内存非顺序存放,且有全局生命周期,都通过指针连接在一起.描述一个链表:,上海大学机电工程与自动化学院 雷电,一种新的存储模式,链条模型:,插入后:,删除后:,链表的长度可以无限增加(只限于内存大小),数据元素在内存中非连续存放,上海大学机电工程与自动化学院 雷电,结点,结点链表中的结点必须是结构体变量,结点的数据类型至少包含两部分信息:1)数据.2)下个结点的地址(指针)
4、。,struct NODE ElemType data;struct NODE*next;,例:struct Student int num;float score;struct Student*next;,数据,头指针、尾指针 只要知道第一个结点的地址(指针)就可以访问到所有结点,指向第0个结点(头结点的)的指针称为头指针。已知头指针也就确定了整个链表。,单链表中最后结点(尾结点)的指针域值=NULL(即等于0),不指向任何内存单元。,head,NULL,上海大学机电工程与自动化学院 雷电,标准C+类库概述,10年的争论,有了C+库的ANSI/ISO标准-Standard Template
5、Library(STL),是ANSI/ISO C+最有特色、最实用的部分之一。STL包括:输入输出类容器类与ADT(抽象数据类型)算法存储管理错误处理语言环境,上海大学机电工程与自动化学院 雷电,7.1 模板的基本知识,使用面向对象方法构建软件系统,我们可以利用OO的特性,很好的解决纵向的问题,因为,OO的核心概念,如继承等,都是纵向结构的。但是,在软件系统中,往往有很多模块,或者很多类共享某个行为,或者说,某个行为存在于软件的各个部分中,这个行为可以看作是“横向”存在于软件之中.例:先进后出行为(栈)代码重用:垂直性:继承、多态水平性:模板(参数化)例:函数的参数其数据类型是参数化的。如:T
6、 a;例:数组类、队列类等,其中的元素的类型是参数化的。,上海大学机电工程与自动化学院 雷电,模板函数用关键字 template 描述的形式参数修饰函数 templateT1,T2,用来说明函数的参数类型。例:求两数中较大的数。templateT maxV(T a,T b)return ab?a:b;main()double a=maxV(0.1,0.2);int d=maxV(1,2);例:查找 templateint SeqSearch(T list,T key,int n)for(int i=0;in;i+)if(listi=key)return i;return-1;,上海大学机电工程
7、与自动化学院 雷电,模板类1.模板类的定义:templateclass 类名;T1,T2,用来说明类中数据成员和成员函数的类型。2.模板类方法的外联式的实现:template 类型 类名:成员函数(.)3.创建模板类对象模板类不是实例类,模板类的模板参数必须有具体的实例类才能创建其对象,否则没有创建其对象的概念。模板类名 obj;模板类名*pobj=new模板类名;,上海大学机电工程与自动化学院 雷电,7.1-7.1.2 模板类,模板实例例:P258 Arraytempl.dsw7.1.3 模板的函数式参数例:P262 Array templ_ex.dsw,上海大学机电工程与自动化学院 雷电,
8、7.2.7 断言(assert),用于调试,使用方法assert(表达式);当表达式为假,系统停止程序在该处,于是可检查调用栈各函数的执行的状态。当表达式为真,系统继续执行后面的代码。头文件#include 在其头文件前声明NDEBUG#define NDEBUG可关闭,即不执行assert语句,节省CPU。最后交付不再调试程序时才这样做。,上海大学机电工程与自动化学院 雷电,7.2 示例程序 模板Stack类,定义实现使用使用assert 用于调试Stack_Ex,模板参数还可以是实例类型例:template class Stack;Stack stack;,上海大学机电工程与自动化学院 雷
9、电,7.3 标准模板库 STL,7.3.1 容器、算法、迭代器STL容器:对象的集合,通过由容器类提供的成员函数,可以实现诸如向序列中插入元素,删除元素,查找元素等操作,这些成员函数通过返回迭代子来指定元素在序列中的位置。序列式:vector,stack,queue,deque,list关联式:set,map特点:容器的大小动态变化,容器中的对象类型是参数化的。,上海大学机电工程与自动化学院 雷电,容器分为三大类:,上海大学机电工程与自动化学院 雷电,算法:对容器进行处理的函数,是模板函数.通用的算法更易于扩充。算法中采用函数对象(function object)引入不同情况下同一算法的差异。
10、它没有使用继承和多态,避免了虚函数的开销,使STL效率更高。copy,sort,search,merge,上海大学机电工程与自动化学院 雷电,迭代子(iterator),迭代子(iterator):对容器中对象的遍历机制,表现如同指针,或是一种高级指针,是面向对象版本的指针,它提供了访问容器或序列中每个对象的方法。这样就可以把算法用于容器所管理的序列。,int A100;int*p=A;for(int i=0;i100;i+)*p=i;p+,vector A(100);vector:iterator p=A.begin();for(int i=0;i100;i+)*p=i;p+;,上海大学机电
11、工程与自动化学院 雷电,各种迭代子可执行的操作,上海大学机电工程与自动化学院 雷电,所有容器通用的方法插入:insert(位置,对象)删除:erase(位置),erase(位置1,位置2)清除所有元素:clear()所有容器通用的特殊方法首元素迭代子:begin()尾迭代子(最后一个元素的后继位置):end()元素个数:size()判容器是否为空:empty()所有容器通用的特殊操作符:访问元素:*迭代子指向下个元素:迭代子+,上海大学机电工程与自动化学院 雷电,顺序容器:push_back 从尾压入数据 pop_back 从尾弹出数据 front 头数据引用 back 尾数据引用 若序列式
12、下标访问关联容器 关键字访问,上海大学机电工程与自动化学院 雷电,头文件,使用STL容器或容器适配器,要包含定义该容器模板类头文件。这些头文件的内容都在std名字空间域中,程序中必须加以说明。,上海大学机电工程与自动化学院 雷电,7.3.4 序列式容器 1)vector,矢量(vector)类提供了具有连续内存地址的数据结构。通过下标运算符 直接有效地访问矢量的任何元素。与数组不同,矢量的内存用尽时,矢量自动分配更大的连续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。这是矢量类的优点。在这里内存分配是由分配子(allocator)完成。矢量可以用来实现队列、堆栈、列表和其他更复杂的结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模板 标准
链接地址:https://www.31ppt.com/p-6302653.html