已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ACM/ICPC程序设计,C+标准模板库C+StandardTemplateLibarary计算机学院万波,主要内容,STL概述:组件、容器、迭代器(iterator)、算法STL容器:常用容器:vector、deque、list、map/multimap、set特殊容器:stack、queue,priority_queue其他容器:hashtableSTL算法:搜寻、排序、拷贝、数值运算,STL概述,STL是C+标准程序库的核心,深刻影响了标准程序库的整体结构STL是泛型(generic)程序库,利用先进、高效的算法来管理数据STL由一些可适应不同需求的集合类(collectionclass),以及在这些数据集合上操作的算法(algorithm)构成STL内的所有组件都由模板(template)构成,其元素可以是任意类型STL是所有C+编译器和所有操作系统平台都支持的一种库,STL概述,/普通C+代码#includeintmain(void)doublea=1,2,3,4,5;std:coutmean(a,5);std:coutstd:endl;return0;,/使用了STL的代码#include#includeintmain()std:vectora;a.push_back(1);a.push_back(2);a.push_back(3);a.push_back(4);a.push_back(5);for(inti=0;ia.size();+i)std:coutaistd:endl;return0;,STL概述,/使用了STL的代码#include#includeintmain()std:vectorq;q.push_back(10);q.push_back(11);q.push_back(12);std:vectorv;for(inti=0;ib)?a:b;,intmain()intx=2,y=6;doublex1=9.123,y1=12.6543;coutMAX(x,y)endl;coutMAX(x1,y1)endl;,STL概述,模板(template)类模板,针对一个或多个尚未明确的类型所撰写的函数或类,#includeusingnamespacestd;/定义名为ex_class的类模板templateclassex_classTvalue;public:ex_class(Tv)value=v;voidset_value(Tv)value=v;Tget_value(void)returnvalue;,intmain()/测试char类型数据ex_classch(A);coutd(5.5);cout“d.value:d.get_value()endl;x.set_value(7.5);cout“d.value:x.get_value()endl;,STL概述,STL组件容器(Container)管理某类对象的集合迭代器(Iterator)在对象集合上进行遍历算法(Algorithm)处理集合内的元素容器适配器(containeradaptor)函数对象(functor),STL组件之间的协作,STL概述,STL容器类别序列式容器排列次序取决于插入时机和位置关联式容器排列顺序取决于特定准则,STL概述,STL容器的共通能力所有容器中存放的都是值而非引用,即容器进行安插操作时内部实施的是拷贝操作。因此容器的每个元素必须能够被拷贝。如果希望存放的不是副本,容器元素只能是指针。所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素各项操作并非绝对安全,调用者必须确保传给操作函数的参数符合需求,否则会导致未定义的行为,STL概述,STL容器元素的条件必须能够通过拷贝构造函数进行复制必须可以通过赋值运算符完成赋值操作必须可以通过析构函数完称销毁动作序列式容器元素的默认构造函数必须可用某些动作必须定义operator=,例如搜寻操作关联式容器必须定义出排序准则,默认情况是重载operator=比较操作两端的容器必须属于同一类型如果两个容器内的所有元素按序相等,那么这两个容器相等采用字典式顺序判断某个容器是否小于另一个容器,STL概述,STL容器的共通操作赋值(assignment)和交换(swap)swap用于提高赋值操作效率与迭代器(iterator)相关的操作begin()返回一个迭代器,指向第一个元素end()返回一个迭代器,指向最后一个元素之后rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素之后,STL概述,容器的共通操作元素操作insert(pos,e)将元素e的拷贝安插于迭代器pos所指的位置erase(beg,end)移除beg,end区间内的所有元素clear()移除所有元素,STL概述,迭代器(iterator)(示例:iterator)可遍历STL容器内全部或部分元素的对象指出容器中的一个特定位置迭代器的基本操作,STL概述,迭代器(iterator)所有容器都提供获得迭代器的函数,半开区间beg,end)的好处:1.为遍历元素时循环的结束时机提供了简单的判断依据(只要未到达end(),循环就可以继续)2.不必对空区间采取特殊处理(空区间的begin()就等于end()),STL概述,迭代器(iterator)所有容器都提供两种迭代器container:iterator以“读/写”模式遍历元素container:const_iterator以“只读”模式遍历元素迭代器示例:iterator,STL概述,迭代器(iterator)迭代器分类双向迭代器可以双向行进,以递增运算前进或以递减运算后退、可以用=和!=比较。list、set和map提供双向迭代器随机存取迭代器除了具备双向迭代器的所有属性,还具备随机访问能力。可以对迭代器增加或减少一个偏移量、处理迭代器之间的距离或者使用之类的关系运算符比较两个迭代器。vector、deque和string提供随机存取迭代器,vectorv;for(pos=v.begin();posv.end();+pos,listl;for(pos=l.begin();pos!=l.end();+pos,STL容器,vectorvector模拟动态数组vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)必须包含的头文件#includevector支持随机存取vector的大小(size)和容量(capacity)size返回实际元素个数,capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,需要重新配置内部存储器。,STL容器,vector构造、拷贝和析构,STL容器,vector非变动操作,STL容器,vector赋值操作,std:listl;std:vectorv;v.assign(l.begin(),l.end();,所有的赋值操作都有可能调用元素类型的默认构造函数,拷贝构造函数,赋值操作符和析构函数,STL容器,vector元素存取,std:vectorv;/emptyv5=t;/runtimeerrorstd:coutv.front();/runtimeerror,STL容器,vector迭代器相关函数,迭代器持续有效,除非发生以下两种情况:(1)删除或插入元素(2)容量变化而引起内存重新分配,STL容器,vector安插(insert)元素,STL容器,vector移除(remove)元素,STL容器,vectorvector应用实例:vector,STL容器,dequedeque模拟动态数组deque的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)必须包含的头文件#includedeque支持随机存取deque支持在头部和尾部存储数据deque不支持capacity和reserve操作,STL容器,deque构造、拷贝和析构,STL容器,deque非变动操作,STL容器,deque赋值操作,std:listl;std:dequev;v.assign(l.begin(),l.end();,所有的赋值操作都有可能调用元素类型的默认构造函数,拷贝构造函数,赋值操作符和析构函数,STL容器,deque元素存取,std:dequedq;/emptydq5=t;/runtimeerrorstd:coutdq.front();/runtimeerror,STL容器,deque迭代器相关函数,迭代器持续有效,除非发生以下两种情况:(1)删除或插入元素(2)容量变化而引起内存重新分配,STL容器,deque安插(insert)元素,STL容器,deque移除(remove)元素,STL容器,dequedeque应用实例:deque,STL容器,list使用双向链表管理元素list的元素可以是任意类型T,但必须具备赋值和拷贝能力必须包含的头文件#includelist不支持随机存取,因此不提供下标操作符在任何位置上执行元素的安插和移除都非常快。安插和删除不会导致指向其他元素的指针、引用、iterator失效。,STL容器,list构造、拷贝和析构,STL容器,list非变动性操作,STL容器,list赋值,STL容器,list元素存取,std:listl;/emptystd:coutl.front();/runtimeerrorif(!l.empty()std:coutl.back();/ok,STL容器,list迭代器相关函数,STL容器,list安插(insert)元素,2019/12/15,45,可编辑,STL容器,list移除(remove)元素,STL容器,list特殊变动性操作,STL容器,list特殊变动性操作(续),STL容器,listlist应用实例:list,STL容器,map/multimap使用平衡二叉树管理元素元素包含两部分(key,value),key和value可以是任意类型必须包含的头文件#include根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢不能直接改变元素的key,可以通过operator直接存取元素值map中不允许key相同的元素,multimap允许key相同的元素,STL容器,map/multimap内部存储结构,STL容器,map/multimap构造、拷贝和析构,其中map可以是下列形式map一个以less(一个以op为排序准则的map,STL容器,map/multimap非变动性操作,STL容器,map/multimap赋值,STL容器,map/multimap特殊搜寻操作,STL容器,map/multimap迭代器相关函数,STL容器,map/multimap安插(insert)元素,STL容器,map/multimap移除(remove)元素,STL容器,map/multimapmap应用实例:map,STL容器,stack(实例:stack)后进先出(LIFO)#include核心接口push(value)将元素压栈top()返回栈顶元素的引用,但不移除pop()从栈中移除栈顶元素,但不返回实例:stack,STL容器,queue(实例:queue)先进先出(FIFO)#include核心接口push(e)将元素置入队列front()返回队列头部元素的引用,但不移除back()返回队列尾部元素的引用,但不移除pop()从队列中移除元素,但不返回实例:queue,STL容器,priority_queue(实例:priority_queue)以某种排序准则(默认为less)管理队列中的元素#include核心接口push(e)根据元素的优先级将元素置入队列top()返回优先队列头部最大的元素的引用,但不移除pop()从栈中移除最大元素,但不返回empty()队列是否为空,STL算法,STL提供了一些标准算法来处理容器内的元素搜寻、排序、拷贝、数值运算STL的算法是全局函数明确划分数据和操作泛型函数式编程模式所有算法可以对所有容器适用,甚至可以操作不同类型容器的元素算法头文件#include#includeSTL算法实例:algorithm,STL算法,区间(range)所有算法都用来处理一个或多个区间内的元素。区间可以但不一定涵盖容器内所有元素为了操作元素的某个子集必须将区间的首尾(iterator)当作两个参数传递给算法调用时必须确保区间有效性从起点出发,逐一前进,能够到达终点。区间首尾两个迭代器必须属于同一容器,且前后放置正确无效区间可能会引起无限循环或者内存非法访问所有算法处理的都是半开区间begin,end),STL算法,STL算法分类非变动性算法(nonmodifyingalgorithms)变动性算法(modifyingalgorithms)移除性算法(removingalgorithms)变序性算法(mutatingalgorithms)排序性算法(sortingalgorithms)已序区间算法(sortedrangealgorithms)数值算法(numericalgorithms),STL算法,for_each()算法for_each(InputIteratorbeg,InputIteratorend,UnaryProcop)对区间be
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳理工大学《计算机网络》2021-2022学年期末试卷
- 沈阳理工大学《工艺美术设计》2022-2023学年第一学期期末试卷
- 沈阳理工大学《单片机接口技术》2023-2024学年期末试卷
- 合同编通则与新公司法银行业务
- 2024标准幼师聘用合同范本
- 期末复习检测提升卷九 -2022-2023学年语文五年级上册(部编版)
- 2024小产权房屋买卖合同协议书样本
- 2024货物采购合同范本
- 2024快递承包合同,快递承包协议
- 2024中学门卫劳动合同范本
- GB/T 10801.2-2018绝热用挤塑聚苯乙烯泡沫塑料(XPS)
- 12J5-1 平屋面建筑标准设计图
- 中印边境争端
- 《墨梅》课件(省一等奖)
- 招聘与录用期末考试卷及答案AB卷2套
- 三美术上册第16课新颖的电脑课件1新人教版
- 实验室基本技能培训课件
- 如何申报科研项目 课件
- 李子栽培管理技术-课件
- 物理听课记录物理听课记录及评析范文(3篇)
- 超星学习通尔雅《人工智能》答案
评论
0/150
提交评论