程序设计实习第二十一讲标准模板.ppt

上传人:人*** 文档编号:568643519 上传时间:2024-07-25 格式:PPT 页数:50 大小:383.31KB
返回 下载 相关 举报
程序设计实习第二十一讲标准模板.ppt_第1页
第1页 / 共50页
程序设计实习第二十一讲标准模板.ppt_第2页
第2页 / 共50页
程序设计实习第二十一讲标准模板.ppt_第3页
第3页 / 共50页
程序设计实习第二十一讲标准模板.ppt_第4页
第4页 / 共50页
程序设计实习第二十一讲标准模板.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《程序设计实习第二十一讲标准模板.ppt》由会员分享,可在线阅读,更多相关《程序设计实习第二十一讲标准模板.ppt(50页珍藏版)》请在金锄头文库上搜索。

1、程序设计实习课程(C+ProgrammingPractice)程序设计实习第二十一讲标准模板库STL-II主讲教师:田永鸿http:/ main()constintSIZE=5;AaSIZE=4,22,19,8,33;ostream_iteratoroutput(cout,);MSET1m1;m1.insert(a,a+SIZE);m1.insert(22);cout1)m1.count(22)endl;MSET1:const_iteratorp;cout2);for(p=m1.begin();p!=m1.end();p+)cout*p,;coutendl;MSET2m2;m2.insert(

2、a,a+SIZE);cout3);copy(m2.begin(),m2.end(),output);coutendl;27MSET1:iteratorpp=m1.find(19);if(pp!=m1.end()/找到 coutfoundendl;cout4);copy(m1.begin(),m1.end(),output);pairpr;coutendl;cout6);cout*m1.lower_bound(22),;cout*m1.upper_bound(22)endl;pr=m1.equal_range(22);cout7)*pr.first,*pr.second;return0;28输出

3、:1)22)4,8,19,22,22,33,3)22,33,4,8,19,found4)4,8,19,22,22,33,6)22,337)22,3329北京大学程序设计实习课程settemplateclassKey,classPred=less,classA=allocatorclassset插入set中已有的元素时,插入不成功。30#include#includeusingnamespacestd;intmain()typedefsetdouble,lessdouble_set;constintSIZE=5;doubleaSIZE=2.1,4.2,9.5,2.1,3.7;double_set

4、doubleSet(a,a+SIZE);ostream_iteratoroutput(cout,);cout1);copy(doubleSet.begin(),doubleSet.end(),output);coutendl; pair p; p = doubleSet.insert(9.5); if(p.second)cout2)*(p.first)insertedendl;elsecout2)*(p.first)notinsertedendl;return0;insert函数返回值是一个pair对象,其first是被插入元素的迭代器,second代表是否成功插入了31输出:1)2.13.7

5、4.29.52)9.5notinserted32北京大学程序设计实习课程multimaptemplateclassKey,classT,classPred=less,classA=allocatorclassmultimap.typedefpairvalue_type;.;/Key代表关键字omultimap中的元素由组成,每个元素是一个pair对象。multimap中允许多个元素的关键字相同。元素按照关键字升序排列,缺省情况下用less定义关键字的“小于”关系33#include#includeusingnamespacestd;intmain()typedefmultimapint,dou

6、ble,lessmmid;mmidpairs;cout1)pairs.count(15)endl;pairs.insert(mmid:value_type(15,2.7);pairs.insert(mmid:value_type(15,99.3);cout“2)”pairs.count(15)endl;/求某关键值的个数pairs.insert(mmid:value_type(30,111.11);pairs.insert(mmid:value_type(10,22.22);34pairs.insert(mmid:value_type(25,33.333);pairs.insert(mmid:

7、value_type(20,9.3);for(mmid:const_iteratori=pairs.begin();i!=pairs.end();i+)cout(first,second),;/输出:1)02)2(10,22.22),(15,2.7),(15,99.3),(20,9.3),(25,33.333),(30,111.11)35北京大学程序设计实习课程maptemplateclassKey,classT,classPred=less,classA=allocatorclassmap.typedefpairvalue_type;.;omap中的元素关键字各不相同。元素按照关键字升序排列

8、,缺省情况下用less定义“小于”36北京大学程序设计实习课程mapo可以用pairskey访形式问map中的元素。npairs为map容器名,key为关键字的值。n该表达式返回的是对关键值为key的元素的值的引用。n如果没有关键字为key的元素,则会往pairs里插入一个关键字为key的元素,并返回其值的引用o如:mappairs;则pairs50=5;会修改pairs中关键字为50的元素,使其值变成537#include#includeusingnamespacestd;ostream&operator(ostream&o,constpair&p)o(p.first,p.second);r

9、eturno;intmain()typedefmapint,double,lessmmid;mmidpairs;cout1)pairs.count(15)endl;pairs.insert(mmid:value_type(15,2.7);pairs.insert(make_pair(15,99.3);/make_pair生成pair对象cout2)pairs.count(15)endl;pairs.insert(mmid:value_type(20,9.3);38mmid:iteratori;cout3);for(i=pairs.begin();i!=pairs.end();i+)cout*i

10、,;coutendl;cout4);intn=pairs40;/如果没有关键字为40的元素,则插入一个for(i=pairs.begin();i!=pairs.end();i+)cout*i,;coutendl;cout5);pairs15=6.28;/把关键字为15的元素值改成6.28for(i=pairs.begin();i!=pairs.end();i+)cout*i,;return0;39输出:1)02)13)(15,2.7),(20,9.3),4)(15,2.7),(20,9.3),(40,0),5)(15,6.28),(20,9.3),(40,0),40北京大学程序设计实习课程思考

11、题o如何用程序用来统计一篇英文文章中单词出现的频率(为简单起见,假定依次从键盘输入该文章)#include#includeusingnamespacestd;intmain()mapwordCount;stringword;while(cinword)+wordCountword;for(map:iteratorit=wordCount.begin();it!=wordCount.end();+it)coutWord:(*it).firsttCount:(*it).secondendl;return0;41北京大学程序设计实习课程容器适配器:stacko可用vector,list,deque来

12、实现n缺省情况下,用deque实现n用vector和deque实现,比用list实现性能好templateclassT,classCont=dequeclassstack.;ostack是后进先出的数据结构,只能插入、删除、访问栈顶的元素42北京大学程序设计实习课程容器适配器:stackostack上可以进行以下操作:npush: 插入元素npop:弹出元素ntop:返回栈顶元素的引用43北京大学程序设计实习课程容器适配器:queueo和stack基本类似,可以用list和deque实现,缺省情况下用deque实现templateclassT,classCont=dequeclassqueue

13、;o同样也有push,pop,top函数o但是push发生在队尾,pop,top发生在队头,先进先出44北京大学程序设计实习课程容器适配器:priority_queueo和queue类似,可以用vector和deque实现,缺省情况下用vector实现。opriority_queue通常用堆排序技术实现,保证最大的元素总是在最前面。即执行pop操作时,删除的是最大的元素,执行top操作时,返回的是最大元素的引用。默认的元素比较器是less45#include#includeusingnamespacestd;intmain()priority_queuepriorities;prioritie

14、s.push(3.2);priorities.push(9.8);priorities.push(5.4);while(!priorities.empty()coutpriorities.top();priorities.pop();return0;/输出结果:9.85.43.246北京大学程序设计实习课程小结(1)o新概念-函数对象classCMyAveragepublic:doubleoperator()(inta1,inta2,inta3)return(double)(a1+a2+a3)/3;CMyAverageAverage;/函数对象coutAverage(3,2,3);o新概念-p

15、air模板pairp;p=doubleSet.insert(9.5);if(p.second)cout2)*(p.first)insertedendl;47北京大学程序设计实习课程小结(2)oSTL中的其它容器类模板nlistsort函数升序降序nmultisetset/排序lessnmultimapmap/排序lesspairnstackqueuepriority_queueo复习copy函数模板48北京大学程序设计实习课程作业o单词过滤程序:in1.txt,in2.txt都是纯文本文件,每行一个英文单词,最多可能有二十万行,一个单词长度最多可以有2000个字符。o要求编程输出out.txt

16、,out.txt里是in2.txt里有,而in1.txt里没有的单词,每个单词一行。单词不分大小写。49北京大学程序设计实习课程2008百度之星程序设计大赛o赛事将至2008年5月30日晚24时注册截止。注册网址:http:/ 标准ANSIC,C+o开发及运行环境开发及运行环境n竞赛的评分工作在Linux+Gcc环境下进行。评分以赛手提交的源码在此环境下的编译运行结果为准。n网络资格赛(初赛)和晋级赛(复赛)时,赛手可以在自己的计算机上使用任何自己熟悉的开发调试软件和工具,进行代码开发和调试工作。n完成后,赛手可以在线提交源码(百度提供在线Linux+Gcc编译环境),得到编译程序的输出信息。o奖项设置奖项设置 n一等奖1名15000元人民币;n二等奖3名6000元人民币;n三等奖5名3000元人民币;n晋级奖大赛珍藏版T恤和08年特别版“度度熊”一只n参与奖所有入围复赛的赛手都将获得大赛限量纪念版T恤一件。50

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号