![C++实用教程[郑阿奇主编]16PPT课件_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-5/21/c7d1412e-29fe-443c-ae8f-778cc21a9dc7/c7d1412e-29fe-443c-ae8f-778cc21a9dc71.gif)
![C++实用教程[郑阿奇主编]16PPT课件_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-5/21/c7d1412e-29fe-443c-ae8f-778cc21a9dc7/c7d1412e-29fe-443c-ae8f-778cc21a9dc72.gif)
![C++实用教程[郑阿奇主编]16PPT课件_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-5/21/c7d1412e-29fe-443c-ae8f-778cc21a9dc7/c7d1412e-29fe-443c-ae8f-778cc21a9dc73.gif)
![C++实用教程[郑阿奇主编]16PPT课件_第4页](http://file1.renrendoc.com/fileroot_temp2/2020-5/21/c7d1412e-29fe-443c-ae8f-778cc21a9dc7/c7d1412e-29fe-443c-ae8f-778cc21a9dc74.gif)
![C++实用教程[郑阿奇主编]16PPT课件_第5页](http://file1.renrendoc.com/fileroot_temp2/2020-5/21/c7d1412e-29fe-443c-ae8f-778cc21a9dc7/c7d1412e-29fe-443c-ae8f-778cc21a9dc75.gif)
已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选,1,第16章标准模板库(STL),16.1迭代器,精选,2,16.1.1迭代器的由来,在STL中,迭代器是一种“特殊”的指针,用来指定或引用容器中元素的位置正是因为对不同容器的操作具有相同的实现代码,所以才会形成STL的算法器及迭代器以优化和简化算法代码。,精选,3,16.1.2迭代器的类型,STL提供了5种不同的迭代器:输入、输出、正向、双向和随机访问迭代器,精选,4,(1)输入迭代器。它是一种单向迭代器,只可递增,不可回退(2)输出迭代器。它是一种单向迭代器,只不过它是向容器中写入元素。(3)正向迭代器。它是输入迭代器和输出迭代器功能的组合,其操作元素总是向前移动(即支持+操作),与输入迭代器或输出迭代器不同的是,它多次遍历的顺序都是相同的。(4)双向迭代器。它常用于reserse(逆序)等操作,支持指针的+和操作。(5)随机访问迭代器。它具有双向迭代器的所有功能,同时增加了直接访问容器中任何元素的功能,即可向前、向后跳过任意多个元素,以及用于对元素排序的关系运算等,精选,5,16.2容器类,容器是一个与数组类似的单元,可以存取若干元素主要容器类有:deque(双端队列)、list(链表、列表)、queue(队列)、stack(栈)、vector(向量)、map(映像)、multimap(多重映像)、set(集合)和multiset(多重集合),精选,6,16.2.1向量、链表和双端队列,1.模型概述向量、链表和双端队列都可以看成是顺序存储的线性表,只是链表不像向量和双端队列那样具有随机访问的能力2.deque、list和vectortemplateclassvector;templateclassdeque;templateclasslist;,精选,7,一旦建立了容器类vector、list或deque实例化类对象,就可以通过对象进行下列常用操作(1)元素的插入操作。用于元素插入操作的成员函数为insert、push_front和push_back(2)元素的删除和清除操作。用于删除元素操作的成员函数有erase、pop_front和pop_back,clear用于清除操作(3)元素访问操作。容器类vector和deque除了提供下标运算符“”来引用指定位置的对象元素的内存空间外,还提供下列元素访问操作(4)迭代器和空间大小属性操作。容器类vector、list和deque都提供下列有关迭代器和空间大小属性的常用操作(5)链表操作。与容器类vector和deque不同的是,容器类list自身还有不同的常用操作,如反序、排序、合并等,精选,8,例Ex_Vector向量容器类示例,#include#include/向量容器类头文件包含#include/迭代器头文件包含#include/算法器头文件包含usingnamespacestd;/演示iterator操作voidshow(vector/演示操作,精选,9,#include#include/向量容器类头文件包含#include/迭代器头文件包含#include/算法器头文件包含usingnamespacestd;/演示iterator操作voidshow(vector,精选,10,程序运行结果如下:,精选,11,4.list示例,例Ex_List链表容器类示例。#include#include/链表容器类头文件包含#include/迭代器头文件包含usingnamespacestd;/演示iterator操作voidshow(list,精选,12,intmain()listv;v.push_back(20);v.push_back(40);v.push_back(5);v.push_back(7);list:iteratorip=v.begin();ip=v.insert(ip,13);v.insert(ip,-7);show(v);/输出所有结点元素v.remove(-7);/移除-7结点v.reverse();show(v);v.sort();show(v);listl;l.push_back(12);l.push_back(8);l.push_back(16);l.push_back(7);v.splice(v.end(),l);show(v);show(l);v.pop_back();v.pop_back();v.pop_back();v.pop_back();show(v);l.push_back(1);l.push_back(8);l.push_back(16);v.merge(l);show(v);show(l);return0;,精选,13,程序运行结果如下:,精选,14,16.2.2栈和队列,栈(stack)是一种“FILO”(先进后出)或“LIFO”(后进先出)的线性表,它只允许在表的一端进行插入和删除操作。而队列(queue)是一种“FIFO”(先进先出)的线性表,与栈刚好相反。在队列中,只允许在表的一端插入元素,而在另一端删除元素。定义对象时,它们都可以有下列简单的形式:Xv;Xv;/使用向量容器来构造/注意,vector的最后面是两个大于符号,它们之间一定要有空格,精选,15,说明:,(1)ANSI/ISOC+类模板stack和deque中都有一个protected数据成员c,其定义如下:protected:Containerc;但在VisualC+2005中,该数据成员是公有的,因此可以在对象中通过c访问构造时指定的容器类模板的成员。对于VisualC+6.0需要通过派生才能使用该数据成员c。(2)另外,类模板stack和deque还都重载了运算符=、=、STACK;classCStack:publicSTACKpublic:voidshow()/遍历操作if(empty()cout:iteratorip=c.begin();/定义指针while(ip!=c.end()cout*ip,t;ip+;coutclassmap;,精选,19,一旦建立了容器类map的实例化对象,就可以通过实例化类对象进行下列常用操作,(1)元素的插入操作。需要说明的是,这里操作的元素是指“键”和“值”的对子,简称键值对。在容器类map中,用于元素插入操作的成员函数为insert(2)元素的删除和清除操作。容器类map用于删除元素操作的成员函数是erase,用于清除操作的是clear(3)元素访问操作。容器类map只提供下标运算符“”来引用指定位置元素的内存空间(4)迭代器和空间大小属性操作。(5)映像操作另外,容器类map还重载了运算符=、=、STR2INT;/定义类型名以便后面使用typedefSTR2INT:iteratorPOS;/定义类型名以便后面使用/输出键值对voidshowpair(POSpos)cout主键为:(*pos).first,t值为:(*pos).secondSTRSET;/定义类型以便后面使用typedefSTRSET:iteratorPOS;/定义类型以便后面使用/遍历输出voidshow(STRSET/显示某范围的键值对,演示lower_bound和upper_bound,精选,26,voidshowu(STRSET,精选,27,intmain()STRSETv;/添加操作v.insert(Zero);v.insert(One);v.insert(Two);v.insert(Three);v.insert(Four);v.insert(Five);v.insert(Six);show(v);/删除操作coutpp=v.equal_range(FIVE);cout*(pp.first)endl;cout*(pp.second)endl;return0;,精选,28,程序运行结果如下:,精选,29,16.3算法,16.3.1概述STL算法部分主要由头文件、和组成。16.3.2copy和流迭代器1.copy函数模板copy将序列中某个范围的元素复制到另一个序列中,精选,30,例Ex_Copycopy函数使用示例,#include#include#include#includeusingnamespacestd;typedefvectorIntVector;intmain()intarr10=2,3,7,8,4,11,5,9,1,13;IntVectorv(8);copy(arr,arr+8,v.begin();ostream_iteratorout(cout,);copy(arr,arr+10,out);coutendl;copy(v.begin(),v.end(),out);cout5),精选,34,intmain()ostream_iteratorout(cout,);inta=1,3,5,6,6,7,7,7,8,8,8,8;/整数数组aconstintANUM=sizeof(a)/sizeof(int);IntVectorv(a,a+ANUM);/A:构造copy(v.begin(),v.end(),out);cout(),7);if(it!=v.end()cout找到*it的位置在:it-v.begin()endl;start=it+1;while(it!=v.end();cout-endl;start=v.begin();,精选,35,do/C:循环找出所有大于7的数it=find_if(start,v.end(),bind2nd(greater(),7);if(it!=v.end()cout找到*it的位置在:it-v.begin()endl;start=it+1;while(it!=v.end();cout-endl;start=v.begin();do/D:循环找出所有(5,8)的数it=find_if(start,v.end(),USERDO();/Eif(it!=v.end()cout找到*it的位置在:it-v.begin()endl;start=it+1;while(it!=v.end();return0;,精选,36,程序运行结果如下:,精选,37,16.3.4sort,函数模板sort用于为指定序列排序,它的原型如下:/sort,RanIt表示随机访问迭代器templatevoidsort(RanItfirst,RanItlast);templatevoidsort(RanItfirst,RanItlast,BPredpred);其功能是将first,last之间的序列按从小到大的升序进行排序,精选,38,例Ex_Sortsort函数使用示例,#include#include#include#includeusingnamespacestd;classC2Predpublic:C2Pred(inta,intb):first(a),second(b)voidshow()cout(first,second)endl;booloperator(constC2Pred,精选,39,intmain()vectorvect;inti;for(i=0;i5;i+)C2Predob(10-i,i*3);vect.push_back(ob);for(i=0;ivect.size();i+)vecti.show();cout按first值从小到大排序:endl;sort(vect.begin(),vect.end();for(i=0;ivect.size();i+)vecti.show();cout按second值从小到大排序:endl;sort(vect.begin(),vect.end(),less_second);for(i=0;ivect.size();i+)vecti.show();return0;,精选,40,程序运行结果如下:,精选,41,16.4综合应用实例,#include#include#include/链表类头文件包含#include/迭代器头文件包含#include#include#includeusingnamespacestd;classCStudent;ostream,精选,42,classCStudentpublic:CStudent()CStudent(char*name,char*id,floats1,floats2,floats3);voidprint(intn=-1);char*GetName()returnstrName;friendostream,精选,43,void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年烟台市蓬莱区卫健系统事业单位公开招聘工作人员(23人)考前自测高频考点模拟试题及答案详解(有一套)
- 2025河南驻马店市正阳县县管国有企业招聘20人(第二批)模拟试卷及答案详解(各地真题)
- 2025年宿州高新医院招聘若干人考前自测高频考点模拟试题及完整答案详解1套
- 2025年福建省五建建设集团有限公司招聘30人笔试历年参考题库附带答案详解
- 2025湖北咸宁市赤壁市教师招聘24人考前自测高频考点模拟试题(含答案详解)
- 浙江国企招聘2025舟山市人才发展集团有限公司新城分公司劳务派遣招聘4人笔试历年参考题库附带答案详解
- 浙江国企招聘2025宁波前湾新兴产业创业投资有限第一批招聘工作人员拟录用笔试历年参考题库附带答案详解
- 国家管网集团2025届高校毕业生招聘笔试历年参考题库附带答案详解
- 2025陕西西安建工绿色建筑集团有限公司3月招聘笔试历年参考题库附带答案详解
- 2025贵州黔南州荔波县金鑫旅游服务有限公司赴省内外高校人才引进20人笔试历年参考题库附带答案详解
- 地震逃生知识培训
- 《济南市城镇燃气领域重大隐患判定指导手册》
- 卢卡奇的《历史与阶级意识》
- JJG693-2011燃气泄漏检测仪器检定规程
- 三峡大学科技学院实习报告及实习成绩考核鉴定表模板
- 电缆电线技术标书
- 柔性压力传感器制备法
- 水稻高产栽培技术要点
- (免费分享)工商银行业务委托书打印版
- GB 5226.1-2008机械电气安全机械电气设备第1部分:通用技术条件
- 《毛泽东思想和中国特色社会主义理论体系概论》全套课件
评论
0/150
提交评论