实用技巧与模版库ppt课件

上传人:钟*** 文档编号:3274559 上传时间:2019-12-10 格式:PPT 页数:50 大小:505KB
返回 下载 相关 举报
实用技巧与模版库ppt课件_第1页
第1页 / 共50页
实用技巧与模版库ppt课件_第2页
第2页 / 共50页
实用技巧与模版库ppt课件_第3页
第3页 / 共50页
点击查看更多>>
资源描述
第八章C+实用技巧与模版库,1,在本章中将介绍各种各样实用的提高我们编程效率的小技巧和模版库。其中绝大多数依靠C+自带类和函数实现。,2,第一节排序算法,排序算法为竞赛中最常用的算法之一,我们可以利用C+自带的库函数进行排序。,3,使用排序算法必须包含algorithm头文件自带排序算法的一般形式为:/将数组arr的下标为m的元素到下标为n-1的元素进行从小到大排序sort(arr+m,arr+n);sort(arr+m,arr+n,comp);/与sort(arr+m,arr+n);相比,这个/写法可以自己定义排序的规则/其中,comp为自定义的函数,4,对于sort(arr+m,arr+n)我们举个简单的例子:/这个程序实现从键盘读入10个数,然后从小到大输出的功能#include#includeusingnamespacestd;inta10;intmain()for(inti=0;iai;sort(a+0,a+10);for(inti=0;i10;+i)coutai;coutn;for(inti=0;iai.name;cinai.score;sort(a+0,a+n,score_comp);for(inti=0;in;+i)coutai.nameai.score(istream,16,我们已经可以实现高精度数的存储,赋值,初始化,输入,输出了。现在一定迫不及待的想知道如何实现高精度的运算了吧。由于篇幅有限,本文仅展示”+”、”+=”重载。这个也是写在结构体里面:BIGNUMoperator+(constBIGNUM,17,对于数字,我们不仅会对它们进行计算,有时我们还会对他它们进行比较,当然这个也要进行运算符重载,依然是在结构体里面补充相关代码:我们先重载下“=0;-i)if(si!=x.si)returnsix.si;returnfalse;/全部都相等,说明小于不成立,18,现在用”(constBIGNUM,19,例8.2运用重载的例子:给出n和m,求出1!+2!+3!+.+n!是否大于m.大于m的话输出”yes”,否则输出”no”.其中0n101,mnm;for(inti=1;im)coutyesendl;elsecoutnos)cout+totsendl;return0;,30,我们用下划线_代替空格,读入时记得使用空格输入样例:_Hello_world!_Today_输出样例:1Hello2world!3Today,31,正如介绍的那样,读入时忽略了空字符,读者可以将其记作cin读字符串读的是单词。当然,有时我们更希望读取的是句子。幸好C+提供了getline函数以供使用。getline的原型是:getline(cin,s);cin指的是读入流,一般情况下我们直接写cin即可,s是字符串,即我们读入的东西要存放的字符串。,32,我们用getline来读取上面的数据:程序:#include#includeusingnamespacestd;intmain()strings;inttot=0;while(getline(cin,s)/getline()读入会舍弃换行符cout+totsendl;return0;我们依旧使用下划线_代替空格.输出为:1_Hello_world!_2_Today_,33,string类型的操作,34,字符串类型相加:strings1(“hello”);/等价于strings1=”hello”;strings2(“worldn”);s1+=s2/等价于s1=s1+s2,此时s1=”helloworldn”字符串“+”操作符的左右操作数必须有一个为字符串类型。strings1=”hello”;strings2=”world”;strings3=s1+”,”;/合法strings4=”hello”+”world”;/非法法strings5=s1+”,”+”world”;/合法,根据从左至右的结合法则/s1+”,”变成一个字符串类型,然后再与”world”相连。strings6=”hello”+”,“+s2;/非法,因为”hello”与”,”都是字符数组类型,35,字符串的下标操作:stringstr=”2+2=4”;coutstr1endl;/将输出+str1=*;/现在str1变成了*其它一些常用操作:,36,将字符串类型的变量转化为数字:/错误方法#include#include#includeusingnamespacestd;intmain()strings1=1234,s2=4321;couts1+s2endl;return0;正如前面所讲s1+s2是将两个字符串类型相连,37,/正确方法#include#include#includeusingnamespacestd;intmain()strings1=1234,s2=4321;inta,b;sscanf(s1.c_str(),%d,同样也可以利用sprintf()将数据输入到sprintf()。sscanf()/sprintf()的用法与scanf()/printf相同,只是在参数中第一个加个字符数组。,38,第四节FIFO队列和优先队列,在实际应用中,我们将会大量使用到FIFO队列和优先队列,本节将介绍这两个C+自带算法。,39,当然,使用他们必须包含queue头文件。定义FIFO队列queue变量名queueque/定义que为一个int类型的FIFO队列queuea/定义a为一个char类型的FIFO队列queuec/定义c为一个data类型的FIFO队列/其中data为自定义的数据类型,可以为结构体定义简单的优先队列priority_queueheap;/定义heap为一个int类型的优先队列priority_queuek;/定义k为一个double类型的优先队列这两种定义方式都是大根堆,想要使其变成小根堆,可以将每个数据都乘以-1,40,定义结构体的优先队列structdataintx;booloperatorq;/q优先队列的优先规则由data重载小于号决定,41,FIFO队列和优先队列的操作,42,利用C+自带优先队列的合并果子代码:#include#include#includeusingnamespacestd;priority_queueque;intmain()intn;scanf(%d,return0;,43,第五节动态数组为了节省空间,有时我们会使用动态数组vector。定义动态数组vector变量名vectorque/定义que为一个int类型的动态数组vectora/定义a为一个char类型的动态数组vectorc/其中data为自定义的数据类型,可以为结构体,44,45,利用C+动态数组实现的排序代码:#include#include#include#includeusingnamespacestd;intmain()vectora;/动态数组intn;scanf(%d,46,第六节关联式容器map在实际应用中,我们可以使用map容器来作为一个有序的映射表,可以将其看做是一个下标可以是任何类型的数组。对map单次操作的时间复杂度为O(lgn)。定义mapmap变量名;mapma;/定义ma为一个从string到int的一个映射访问map中的元素mapma;/定义mama“abc”=2;/将字符串”abc”映射到整数”2”上coutma“abc”endl;/屏幕上将输出整数2同时,map中的类型可以是自己定义的结构体,此时结构体中应该有重载小于符号。,47,map的操作:,48,注意:一旦map中的一个元素被访问,不论它之前是否已经被赋值,它都将被视为已经存在,例如:if(ma“abc”)/*dosomething*/;if(ma.count(“abc”)cout#include#includeusingnamespacestd;mapma;,49,intmain()maapple=1;mabanana=2;malemon=3;coutfirstsecondendl;/输出malemon,即输出3return0;,50,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!