




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1STL讲义讲义(jingy)第一页,共87页。第1页/共86页第二页,共87页。programming) 制,以及标准模板库 STL第2页/共86页第三页,共87页。第3页/共86页第四页,共87页。第4页/共86页第五页,共87页。n类或函数。第5页/共86页第六页,共87页。plate)n是独立于类型的函数n可产生函数的特定(tdng)版本n类模板(class template)n跟类相关的模板,如vectorn可产生类对特定(tdng)类型的版本,如vector7第6页/共86页第七页,共87页。yng)模板template T max(T a , T b)return ( a
2、b ) ? a , b;2.template (模板函数形参表)/函数定义体8第7页/共86页第八页,共87页。ng),不能直接执行,需要实例化为模板函数后才能执行n在说明(shumng)了一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参,然后生成一个重载函数。该重载函数的定义体与函数模板的函数定义体相同,它称之为模板函数9第8页/共86页第九页,共87页。void main() int a=1,3,0,2,7,6,4,5,2; double b=1.2,-3.4,6.8,9,8; cout”a数组的最小值为:” min(a,9) en
3、dl; cout”b数组的最小值为:” min(b,4)endl; 此程序(chngx)的运行结果为:a数组的最小值为:0b数组的最小值为:第9页/共86页第十页,共87页。第10页/共86页第十一页,共87页。上述问题时用大量不同函数名表示相似功能的坏习惯n克服了宏定义不能进行参数类型检查的弊端n克服了C+函数重载用相同函数名字(mng zi)重写几个函数的繁琐n缺点,调试比较困难n一般先写一个特殊版本的函数n运行正确后,改成模板函数12第11页/共86页第十二页,共87页。第12页/共86页第十三页,共87页。第13页/共86页第十四页,共87页。第14页/共86页第十五页,共87页。第1
4、5页/共86页第十六页,共87页。第16页/共86页第十七页,共87页。列第17页/共86页第十八页,共87页。第18页/共86页第十九页,共87页。20比较两个容器(rngq)的例子:#include #include int main()std:vector v1;std:vector v2;v1.push_back (5); v1.push_back (1);v2.push_back (1); v2.push_back (2);v2.push_back (3);std:cout (v1 v2); return 0;若两容器长度相同(xin tn)、所有元素相等,则两个容器就相等,否则为不
5、等。若两容器长度不同,但较短容器中所有元素都等于较长容器中对应的元素,则较短容器小于另一个容器若两个容器均不是对方的子序列,则取决于所比较的第一个不等的元素输出:0第19页/共86页第二十页,共87页。clear 从容器中删除所有元素HeadTailbeginrbeginrendend第20页/共86页第二十一页,共87页。第21页/共86页第二十二页,共87页。第22页/共86页第二十三页,共87页。 ChainNode *current;第23页/共86页第二十四页,共87页。第24页/共86页第二十五页,共87页。第25页/共86页第二十六页,共87页。 return old;第26页/
6、共86页第二十七页,共87页。第27页/共86页第二十八页,共87页。 vsfor (int i = 0; i x.Size(); i+) examine(x.Get(i);第28页/共86页第二十九页,共87页。n* 迭代器变量名第29页/共86页第三十页,共87页。第30页/共86页第三十一页,共87页。例如:#include #include using namespace std;int main() vector v; /一个存放int元素的向量,一开始里面没有元素v.push_back(1);v.push_back(2); v.push_back(3); v.push_back(4
7、);vector:const_iterator i; /常量(chngling)迭代器for( i = v.begin();i != v.end();i + ) cout * i ,;cout endl;第31页/共86页第三十二页,共87页。vector:reverse_iterator r; /反向(fn xin)迭代器for( r = v.rbegin();r != v.rend();r+ ) cout * r ,;cout endl;vector:iterator j; /非常量迭代器for( j = v.begin();j != v.end();j + ) * j = 100;for
8、( i = v.begin();i != v.end();i+ ) cout * i ,;输出结果:1,2,3,4,4,3,2,1,100,100,100,100,第32页/共86页第三十三页,共87页。第33页/共86页第三十四页,共87页。第34页/共86页第三十五页,共87页。np - i:(zh xin) p i元素的迭代器np p1, p p1, p= p1第35页/共86页第三十六页,共87页。第36页/共86页第三十七页,共87页。例如,vector的迭代器是随机迭代器,所以遍历 vector 可以有以下几种做法:vector v(100);vector:value_type i
9、; /等效于写 int i;for(i = 0;i () ; i +)cout vi;vector:const_iterator ii;for( ii = (); ii != ();ii + )cout * ii;/间隔(jin g)一个输出:ii = ();while( ii () cout * ii; ii = ii + 2; 第37页/共86页第三十八页,共87页。而 list 的迭代器是双向迭代器,所以以下代码(di m)可以:list v;list:const_iterator ii;for( ii = (); ii ! ();ii + )cout * ii;以下代码(di m)则不
10、行:for( ii = (); ii ();ii + )cout * ii;/双向迭代器不支持 for(int i = 0;i () ; i +)cout vi; /双向迭代器不支持 第38页/共86页第三十九页,共87页。n算法可以处理容器,也可以处理C语言的数组第39页/共86页第四十页,共87页。n的算法第40页/共86页第四十一页,共87页。该迭代器指向查找区间终点。第41页/共86页第四十二页,共87页。#include #include #include using namespace std;main() int array10 = 10,20,30,40;vector v;v.
11、push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);vector:iterator p;p = find(v.begin(),v.end(),3);if( p != ()cout * p endl;第42页/共86页第四十三页,共87页。p = find(v.begin(),v.end(),9);if( p = ()cout not found endl;p = find(v.begin()+1,v.end()-2,1);if( p != ()cout * p endl;int * pp = find( array,array+4
12、,20);cout * pp endl;输出(shch):3not found320第43页/共86页第四十四页,共87页。第44页/共86页第四十五页,共87页。nconst_reference front() const;nlist有两个front函数第45页/共86页第四十六页,共87页。const int &第46页/共86页第四十七页,共87页。第47页/共86页第四十八页,共87页。例1:int main() int i;int a5 = 1,2,3,4,5 ; vector v(5);cout () - () endl;for( i = 0;i v.size();i +
13、) vi = i;v.at(4) = 100;for( i = 0;i v.size();i + )cout vi , ;cout endl;vector v2(a,a+5); /构造函数v2.insert( v2.begin() + 2, 13 ); /在begin()+2位置(wi zhi)插入 13for( i = 0;i v2.size();i + )cout v2i , ; return 0;第48页/共86页第四十九页,共87页。输出(shch):50,1,2,3,100,1,2,13,3,4,5,第49页/共86页第五十页,共87页。例2:int main() const int
14、 SIZE = 5;int aSIZE = 1,2,3,4,5 ; vector v (a,a+5); /构造函数try v.at(100) = 7;catch( out_of_range e) cout () endl;cout () “,” () endl;();ostream_iterator output(cout ,“*);copy (v.begin(),v.end(),output);( (); /等效于 ();第50页/共86页第五十一页,共87页。if( ()cout empty endl; (v.begin(),a,a+SIZE);copy (v.begin(),v.end(
15、),output); / 输出(shch):invalid vector subscript1,52*3*4*5*empty1*2*3*4*5*第51页/共86页第五十二页,共87页。第52页/共86页第五十三页,共87页。关于 ostream_iterator, istream_iterator的例子int main() istream_iterator inputInt(cin);int n1,n2;n1 = * inputInt; /读入 n1inputInt +; n2 = * inputInt; /读入 n2cout n1 , n2 endl;ostream_iterator out
16、putInt(cout);* outputInt = n1 + n2; cout endl;int a5 = 1,2,3,4,5;copy(a,a+5,outputInt); /输出(shch)整个数组 return 0;第53页/共86页第五十四页,共87页。程序运行后输入 78 90敲回车(hu ch),则输出结果为:78,9016812345第54页/共86页第五十五页,共87页。nreverse: nsplice: 在指定位置前面插入另一链表中的一个或多个元素,并在另一链表中删除被插入的元素第55页/共86页第五十六页,共87页。第56页/共86页第五十七页,共87页。58nn而顺序容
17、器则通过元素在容器中的位置顺序存储和访问元素。第57页/共86页第五十八页,共87页。59nm.count(k) :返回m中k的出现次数n插入元素用 insert 第58页/共86页第五十九页,共87页。60第59页/共86页第六十页,共87页。第60页/共86页第六十一页,共87页。第61页/共86页第六十二页,共87页。第62页/共86页第六十三页,共87页。/出错的例子:#include using namespace std;class A ;int main() multiset a;a.insert( A(); /error return/编译出错是因为,插入元素(yun s)时,
18、multiset会将被插入元素(yun s)和已有元素(yun s)进行比较,以决定新元素(yun s)的存放位置。本例中缺省地就是用less函数对象进行比较,然而less函数对象进行比较时,前提是A对象能用 进行比较。但本例中没有适当重载 第63页/共86页第六十四页,共87页。65第64页/共86页第六十五页,共87页。#include #include using namespace std;int main() typedef setdouble,less double_set;const int SIZE = 5;double aSIZE = 2.1,4.2,9.5,2.1,3.7
19、;double_set doubleSet(a,a+SIZE);ostream_iterator output(cout, );cout 1) ;copy(doubleSet.begin(),doubleSet.end(),output);cout endl; pair p; p = doubleSet.insert(9.5); if( ) cout 2) * () inserted endl; else cout 2) * () not inserted endl; return 0; insert函数返回值是一个pair对象, 其first是被插入(ch r)元素的迭代器,second代表
20、是否成功插入(ch r)了第65页/共86页第六十六页,共87页。输出(shch):2) 9.5 not inserted第66页/共86页第六十七页,共87页。68第67页/共86页第六十八页,共87页。69第68页/共86页第六十九页,共87页。70第69页/共86页第七十页,共87页。#include #include using namespace std;ostream & operator ( ostream & o,const pair & p)o ( , );return o;int main() typedef mapint,double,less m
21、mid;mmid pairs;cout 1) pairs.count(15) endl;pairs.insert(mmid:value_type(15,2.7);pairs.insert(make_pair(15,99.3);/make_pair生成(shn chn)pair对象cout 2) pairs.count(15) endl;pairs.insert(mmid:value_type(20,9.3);第70页/共86页第七十一页,共87页。 mmid:iterator i; cout 3) ; for( i = (); i != pairs.end();i + ) cout * i ,
22、;cout endl;cout 4) ;int n = pairs40;/如果没有关键字为40的元素(yun s),则插入一个for( i = (); i != pairs.end();i + )cout * i ,;cout endl;cout 5) ;pairs15 = 6.28; /把关键字为15的元素(yun s)值改成for( i = (); i != pairs.end();i + )cout * i ,; return 0;第71页/共86页第七十二页,共87页。输出(shch):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),第72页/共86页第七十三页,共87页。74第73页/共86页第七十四页,共87页。75第74页/共86页第七十五页,共87页。76第75页/共86页第七十六页,共87页。77第76页/共86页第七十七页,共87页。78第77页/共86页第七十八页,共87页。#include #include using namespace std;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国居民室内游艺行业发展前景预测及投资战略研究报告
- 火锅店开业促销活动策划方案模板
- 2025年中国磷酸酸洗缓蚀剂行业市场发展前景及发展趋势与投资战略研究报告
- 中国电容指纹芯片行业市场全景评估及投资前景展望报告
- 铁路治安管理课件
- 中国刹车盘行业发展前景预测及投资战略研究报告
- 学校计算机工作方案总结
- 2025年中国液体提升机行业市场深度分析及投资策略咨询报告
- 2025-2030年中国手机数码摄像头行业深度研究分析报告
- 临床检验实习生试题及答案2025版
- 乙烯焦油现状调查分析及市场行情前景行业报告2025年
- 退休医生聘用合同协议
- GB/T 25820-2025包装用钢带
- 航空紧固件与保险石冬剑课件
- 电影营销推广策略手册
- 宣传片拍摄合作协议合同
- 2025年度物业管理合同范本
- 浙江传媒学院计算机C语言期末(共六卷)含答案解析
- 工程进度偏差分析表
- 2024年河南省焦作市武陟县小升初数学试卷(带答案)人教版
- GSP认证质量管理体系文件
评论
0/150
提交评论