书签 分享 收藏 举报 版权申诉 / 27
上传文档赚钱

类型C-语言程序设计解析课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4145041
  • 上传时间:2022-11-14
  • 格式:PPT
  • 页数:27
  • 大小:129.44KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C-语言程序设计解析课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言程序设计 解析 课件
    资源描述:

    1、第十章第十章 C+标准模板库标准模板库C+语言程序设计1C+语言程序设计软件学院 李建东C+语言程序设计主要内容主要内容l泛型程序设计泛型程序设计l与标准模板库有关的概念和术语与标准模板库有关的概念和术语lC+标准模板库中的容器标准模板库中的容器l迭代器迭代器l标准标准C+库中的算法库中的算法l函数对象函数对象 2C+语言程序设计软件学院 李建东C+语言程序设计泛型程序设计泛型程序设计l将程序写得尽可能通用将程序写得尽可能通用 l将算法从特定的数据结构中抽象出来,成将算法从特定的数据结构中抽象出来,成为通用的为通用的lC+的模板为泛型程序设计奠定了关键的的模板为泛型程序设计奠定了关键的基础基础

    2、 lSTL是泛型程序设计的一个范例是泛型程序设计的一个范例 容器(container)迭代器(iterator)算法(algorithms)函数对象(function object)3C+语言程序设计软件学院 李建东C+语言程序设计命名空间(命名空间(namespace)l一个命名空间将不同的标识符集合在一个一个命名空间将不同的标识符集合在一个命名作用域(命名作用域(named scope)内)内 为了解决命名冲突 例如,声明一个命名空间NS:namspace NS class File;void Fun();则引用标识符的方式如下,NS:File obj;NS:Fun();l没有声明命名空间

    3、的标识符都处于无名的没有声明命名空间的标识符都处于无名的命名空间中命名空间中概念和术语4C+语言程序设计软件学院 李建东C+语言程序设计命名空间(续)命名空间(续)l可以用可以用using来指定命名空间来指定命名空间 例如,经过以下声明:using NS:File;在当前作用域中就可以直接引用File using namespace std;命名空间std中所有标识符都可直接引用l在新的在新的C+标准程序库中,所有标识标准程序库中,所有标识符都声明在命名空间符都声明在命名空间std中,头文件中,头文件都不使用扩展名都不使用扩展名概念和术语5C+语言程序设计软件学院 李建东C+语言程序设计容器容

    4、器l容器类是容纳、包含一组元素或元素容器类是容纳、包含一组元素或元素集合的对象。集合的对象。l异类容器类与同类容器类异类容器类与同类容器类l顺序容器与关联容器顺序容器与关联容器l七种基本容器:七种基本容器:向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)概念和术语6C+语言程序设计软件学院 李建东C+语言程序设计容器的接口容器的接口l通用容器运算符通用容器运算符=,!=,=,=,=l方法(函数)方法(函数)迭代方法lbegin(),end(),rbegin(),rend()访问方法lsiz

    5、e(),max_size(),swap(),empty()7C+语言程序设计软件学院 李建东C+语言程序设计适配器适配器l适配器是一种接口类适配器是一种接口类 为已有的类提供新的接口。目的是简化、约束、使之安全、隐藏或者改变被修改类提供的服务集合。l三种类型的适配器:三种类型的适配器:容器适配器l用来扩展7种基本容器,它们和顺序容器相结合构成栈、队列和优先队列容器 迭代器适配器 函数对象适配器。概念和术语8C+语言程序设计软件学院 李建东C+语言程序设计迭代器迭代器迭代器是面向对象版本的指针,它迭代器是面向对象版本的指针,它们提供了访问容器、序列中每个元素的们提供了访问容器、序列中每个元素的方

    6、法。方法。概念和术语9C+语言程序设计软件学院 李建东C+语言程序设计算法算法lC+标准模板库中包括标准模板库中包括70多个算法多个算法 其中包括查找算法,排序算法,消除算法,记数算法,比较算法,变换算法,置换算法和容器管理等等。l这些算法的一个最重要的特性就是它这些算法的一个最重要的特性就是它们的统一性,并且可以广泛用于不同们的统一性,并且可以广泛用于不同的对象和内置的数据类型。的对象和内置的数据类型。概念和术语10C+语言程序设计软件学院 李建东C+语言程序设计顺序容器顺序容器l顺序容器的接口顺序容器的接口 插入方法lpush_front(),push_back(),insert(),运算

    7、符“=”删除方法lpop(),erase(),clear()迭代访问方法l使用迭代器 其他顺序容器访问方法(不修改访问方法)lfront(),back(),下标运算符容 器11C+语言程序设计软件学院 李建东C+语言程序设计顺序容器顺序容器向量向量l向量属于顺序容器,用于容纳不定长向量属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问)列的快速随机访问(也称直接访问)l向量是动态结构,它的大小不固定,向量是动态结构,它的大小不固定,可以在程序运行时增加或减少。可以在程序运行时增加或减少。l例例10-1 求范围2N中的质数,

    8、N在程序运行时由键盘输入。容 器12/10_1.cpp/10_1.cpp#include#include#include#include#include#include /包含向量容器头文件包含向量容器头文件using namespace std;using namespace std;intint main()main()vector vector A(10);A(10);intint n;n;intint primecountprimecount=0,i,j;=0,i,j;coutcout=2 as upper limit:;=2 as upper limit:;cincin n;n;Ap

    9、rimecountAprimecount+=2;+=2;1313 for(ifor(i=3;i n;i+)=3;i n;i+)if(if(primecountprimecount=A.sizeA.size()()A.resize(primecountA.resize(primecount+10);+10);if(i%2=0)if(i%2=0)continue;continue;j=3;j=3;while(j=i/2&i%j!=0)while(j i/2)if(j i/2)AprimecountAprimecount+=i;+=i;for(i=0;i for(i=0;iprimecountpri

    10、mecount;i+)/;i+)/输出质数输出质数 coutcoutsetw(5)setw(5)AiAi;if(i+1)%10=0)/if(i+1)%10=0)/每输出每输出1010个数换行一次个数换行一次 coutcout endlendl;coutcoutendlendl;1414C+语言程序设计软件学院 李建东C+语言程序设计顺序容器顺序容器双端队列双端队列l双端队列是一种放松了访问权限的队双端队列是一种放松了访问权限的队列。元素可以从队列的两端入队和出列。元素可以从队列的两端入队和出队,也支持通过下标操作符队,也支持通过下标操作符“”进进行直接访问。行直接访问。l例例10-2 使用双端

    11、队列容器保存double数值序列容 器15C+语言程序设计软件学院 李建东C+语言程序设计顺序容器顺序容器列表列表l列表主要用于存放双向链表,可以从任意列表主要用于存放双向链表,可以从任意一端开始遍历。列表还提供了拼接一端开始遍历。列表还提供了拼接(splicing)操作,将一个序列中的元素从)操作,将一个序列中的元素从插入到另一个序列中。插入到另一个序列中。l例例10-3 改写例改写例9-7 从键盘输入10个整数,用这些整数值作为结点数据,生成一个链表,按顺序输出链表中结点的数值。然后从键盘输入一个待查找整数,在链表中查找该整数,若找到则删除该整数所在的结点(如果出现多次,全部删除),然后输

    12、出删除结点以后的链表。在程序结束之前清空链表。容 器16/10_3.cpp/10_3.cpp#include#include#include#include using namespace std;using namespace std;intint main()main()list list Link;Link;/构造一个列表用于存放整数链表构造一个列表用于存放整数链表 intint i,key,item;i,key,item;for(ifor(i=0;i 10;i+)/=0;i item;item;Link.push_front(itemLink.push_front(item););co

    13、utcoutList:;/List:;/输出链表输出链表1717 listlist:iteratoriterator p=p=Link.beginLink.begin();();while(pwhile(p!=!=Link.endLink.end()/()/输出各节点数据,直到链表尾输出各节点数据,直到链表尾 coutcout *p ;p ;p+;/p+;/使使P P指向下一个节点指向下一个节点 coutcout endlendl;coutcout key;key;Link.remove(keyLink.remove(key););coutcout List:;/List:;/输出链表输出链表

    14、 p=p=Link.beginLink.begin();();/使使P P重新指向表头重新指向表头 while(pwhile(p!=!=Link.endLink.end()()coutcout *p ;p ;p+;/p+;/使使P P指向下一个节点指向下一个节点 coutcout endlendl;1818C+语言程序设计软件学院 李建东C+语言程序设计容器适配器容器适配器l容器适配器是用来扩展容器适配器是用来扩展7种基本容器的种基本容器的l栈容器栈容器 使用适配器与一种基础容器相结合来实现 例10-4:应用标准库中的deque顺序容器生成一个整数栈stack。l队列容器队列容器 使用适配器与

    15、一种基础容器相结合来实现的先进先出数据结构。例10-5:应用标准库中的deque顺序容器生成一个整数标准队列queue。容 器19C+语言程序设计软件学院 李建东C+语言程序设计什么是迭代器什么是迭代器l迭代器是面向对象版本的指针迭代器是面向对象版本的指针 指针可以指向内存中的一个地址 迭代器可以指向容器中的一个位置lSTL的每一个容器类模版中,都定义的每一个容器类模版中,都定义了一组对应的迭代器类。使用迭代器,了一组对应的迭代器类。使用迭代器,算法函数可以访问容器中指定位置的算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。元素,而无需关心元素的具体类型。迭代器20C+语言程序

    16、设计软件学院 李建东C+语言程序设计迭代器的类型迭代器的类型l输入迭代器输入迭代器 可以用来从序列中读取数据l输出迭代器输出迭代器 允许向序列中写入数据l前向迭代器前向迭代器 既是输入迭代器又是输出迭代器,并且可以对序列进行单向的遍历l双向迭代器双向迭代器 与前向迭代器相似,但是在两个方向上都可以对数据遍历l随机访问迭代器随机访问迭代器 也是双向迭代器,但能够在序列中的任意两个位置之间进行跳转。迭代器21C+语言程序设计软件学院 李建东C+语言程序设计迭代器适配器迭代器适配器l迭代器适配器是用来扩展(或调整)迭代器功能迭代器适配器是用来扩展(或调整)迭代器功能的类。它本身也被称为迭代器,只是这

    17、种迭代器的类。它本身也被称为迭代器,只是这种迭代器是通过改变另一个迭代器而得到的是通过改变另一个迭代器而得到的l逆向迭代器逆向迭代器 通过重新定义递增运算和递减运算,使其行为正好倒置l插入型迭代器插入型迭代器 将赋值操作转换为插入操作。通过这种迭代器,算法可以执行插入行为而不是覆盖行为l例例10-6 应用逆向迭代器和后插迭代器来操作向量容器中的元素迭代器22C+语言程序设计软件学院 李建东C+语言程序设计迭代器相关的辅助函数迭代器相关的辅助函数ladvance()函数函数 将迭代器的位置增加,增加的幅度由参数决定ldistance()函数函数 返回迭代器之间的距离l函数函数iter_swap(

    18、)交换两个迭代器所指向的元素值l例例10-7 用三个迭代器辅助函数来操作列表容器中的元素。迭代器23C+语言程序设计软件学院 李建东C+语言程序设计标准标准C+库中的算法库中的算法l算法本身是一种函数模板算法本身是一种函数模板l不可变序列算法不可变序列算法(n non-mutating algorithmson-mutating algorithms)不直接修改所操作的容器内容的算法l可变序列算法可变序列算法(m mutating algorithmsutating algorithms)可以修改它们所操作的容器的元素。l排序相关算法排序相关算法l数值算法数值算法算 法24C+语言程序设计软件

    19、学院 李建东C+语言程序设计算法应用举例算法应用举例l例例10-9 应用不可变序列算法对数据序列进行分析l例例10-10 以可变序列算法对数据序列进行复制,生成,删除,替换,倒序,旋转等可变性操作。l例例10-11 应用排序相关算法对序列进行各项操作l例例10-12 应用数值算法对数据序列进行操作算 法25C+语言程序设计软件学院 李建东C+语言程序设计函数对象函数对象l一个行为类似函数的对象,它可以没有参一个行为类似函数的对象,它可以没有参数,也可以带有若干参数,其功能是获取数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。一个值,或者改变操作的状态。l任何普通的函数和任何重载

    20、了调用运算符任何普通的函数和任何重载了调用运算符operator()的类的对象都满足函数对象的特的类的对象都满足函数对象的特征征lSTL中也定义了一些标准的函数对象,如中也定义了一些标准的函数对象,如果以功能划分,可以分为算术运算、关系果以功能划分,可以分为算术运算、关系运算、逻辑运算三大类。为了调用这些标运算、逻辑运算三大类。为了调用这些标准函数对象,需要包含头文件准函数对象,需要包含头文件。26C+语言程序设计软件学院 李建东C+语言程序设计小结与复习建议小结与复习建议l主要内容主要内容 泛型程序设计、与标准模板库有关的概念和术语、C+标准模板库中的容器、迭代器、标准C+库中的算法、函数对象 l达到的目标达到的目标 初步了解泛型程序设计的概念,学会C+标准模板库(STL)的使用方法l实验任务实验任务 实验十27

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C-语言程序设计解析课件.ppt
    链接地址:https://www.163wenku.com/p-4145041.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库