下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+ Primer第11章学习笔记第 11 章:泛型算法 标准库提供一组不依赖特定的容器类型的算法作用在不同类型的容器和不同类型的元 素上。学习摘录 1 1 3:算法重要性质 算法也许会改变存储在容器中的元素的值,也许会在容器内移动元素。 但是,算法从不直接添加或删除元素。 如果需要添加或删除元素, 则必须使用容器操作。第二节:初窥算法 #include <algorithm>/ 使用泛型算法 #include <numeric>/ 泛化的算术算法( generalized numeric algorithm )学习摘录 1 1 4:迭代器实参类型 大多数算法(前两个参
2、数指定范围) : 通常:泛型算法都是在标记容器(或其他序列)内的元素范围的迭代器上操作的。标记范围的两个实参类型必须精确匹配,而迭代器本身必须标记一个范围: 它们必须指向同一个容器中的元素(或者超出容器末端的下一位置) , 并且如果两者不相等,则第一个迭代器通过不断地自增,必须可以到达第二个迭代器。 有些算法(带有两对迭代器参数)每对迭代器中,两个实参的类型必须精确匹配,但不要求两对之间的类型匹配。 当元素存储在不同类型的序列中时,只要这两个序列中的元素可以比较即可。第三节:再谈迭代器C+语言还提供了另外三种迭代器学习摘录 1 1 5:三种容器的简单介绍插入迭代器(insert iterato
3、r):这类迭代器与容器绑定在一起,实现在容器中插入元素 的功能。 iostream 迭代器( iostream iterator ):这类迭代器可与输入或输出流绑定在一起,用于 迭代遍历所关联的 IO 流。反向迭代器(reverse iterator):这类迭代器实现向后遍历,而不是向前遍历。学习摘录 116:三种插入迭代器这里有三种插入器,其差别在于插入元素的位置不同: 1. back_inserter, 创建使用 push_back 实现插入迭代器 2. front_inserter, 使用 push_front 实现插入。 3. insert, 使用 insert 实现插入操作。学习摘录
4、 117:三种 inserter 的综合应用在使用 front_inserter 时,元素始终在容器的第一个元素前面插入。使用 inserter 时,元素则在指定位置前面插入。list<int> ilst, ilst2, ilst3; / empty lists/ after this loop ilst contains: 3 2 1 0for (list<int>:size_type i = 0; i != 4; +i) ilst.push_front(i);/ after copy ilst2 contains: 0 1 2 3/ 与原容器顺序相反copy(ils
5、t.begin(), ilst.end(), front_inserter(ilst2);/ after copy, ilst3 contains: 3 2 1 0 / 与原容器顺序没变 copy(ilst.begin(), ilst.end(), inserter(ilst3, ilst3.begin() ); istream_iterator<T> in(strm);对象 istream_iterator<T> in; ostream_iterator<T> in(strm); 对象学习摘录 118: iostream 迭代器的构造函数 创建从输入流 s
6、trm 中读取 T 类型对象的 istream_iteratoristream_iterator 对象的超出末端迭代器创建将 T 类型的对象写到输出流 strm 的 ostream_iterator ostream_iterator<T>in(strm, delim); 创 建 将 T 类 型 的 对 象 写 到 输 出 流 strm 的ostream_iterator 对象,在写入过程中使用 delim 作为元素的分隔符。 delim 是以空字符结束 的字符数组。学习摘录 119:流迭代器的定义 istream_iterator<int> cin_in(cin);/
7、reads ints from cinistream_iterator<int> end_of_stream;/ end iterator value/ writes Sales_items from the ofstream named outfile/ each element is followed by a space ofstream outfile;ostream_iterator<Sales_item> output(outfile, “ );学习摘录 120: istream_iterator 对象上的操作 下面的程序,衔从 cin 中读取 int 型数
8、据,然后,使用 eof 作为结束符; 在循环中,从 cin 中读取 int 型数据,并将读入的内容保存在 vec 中,再实现自增。 istream_iterator<int> in_iter(cin);/ read ints from cinistream_iterator<int> eof; / istream“ end ” iterator/ read until end of file, storing what was read in vec while(in_iter != eof)/ increment advances the stream to the
9、next value/ dereference reads next value from the istream vec.push_back(*in_iter+);也能直接用构造函数的方法新建对象:如下 istream_iterator<int> in_iter(cin);/ read ints from cinistream_iterator<int> eof; / istream “ end ” iterator vector<int> vec(in_iter, eof);/ construct vec from an iterator range学习
10、摘录 121: ostream_iterator 对象的使用可使用 ostream_iterator 对象将一个值序列写入流中,其操作的过程与使用迭代器在将 一个组值逐个赋给容器中的元素相同。/ write one string per line to the standard outputostream_iterator<string> out_iter(cout, “ n ” );/ read strings from standard input and the end iteratoristream_iterator <string> in_iter(cin),
11、 eof; / 此处会先输入第一次/ read until eof and write what was read to the standard outputwhile(in_iter != eof)/ write value of in_iter to standard output/ and then increment the iterator to get the next value from cin*out_iter+ = *in_iter+; / 由于那次已输入了第一次,这次会再要求输入一次再显示 摘录有想 121 :程序经测试, 每当输入一行字符后, 则在下次输入另一行字符后
12、显示上一行输入的字符。 该程序可从 while 语句入手去想,逐行输入,放入 in_iter, 之后 out_iter 读取并显示。 解引操作符能够使用数据。学习摘录 122:与算法一起使用迭代器先看下面的例子:istream_iterator<int> cin_it(cin);/ reads ints from cinistream_iterator<int> end_of_stream;/ end iterator value/ initialize vec from the standard input:vector<int> vec (cin_it,
13、 end_of_stream);sort(vec.begin(), vec.end() );/ writes ints to cout using“ as the delimiterostream_iterator<int> output(cout, “ );/ write only the unique elements in vec to the standard outputunique_copy(vec.begin(), vec.end(), output);摘录有想 122 :以前总是看不懂这类程序, 我想, 现在看完这章的内容后, 基本上还是理解了这类程序 写的是什么了
14、。前两行不断输入,直到遇到结束符,第三行,将输入的全部 int 逐个放入 vec 中; 第四行,对容器进行排序。第五行,在每个 cout 之间输入 ”“ ;最后行,符合算法的格式, unique_copy 算法, unique 的“复制”版本,将输入范围内 不重复的值输出,每个复制值后输出一个空格。第四节:泛型算法的结构 算法最基本的性质是需要使用的迭代器种类学习摘录 123:根据对元素的操作将算法分为下面三种: 1. 只读算法,不改变元素的值和顺序。 2. 给指定元素赋新值的算法。 3. 将一个元素的值移给另一个元素的算法。学习摘录 124:算法的形参模式 1. alg(beg, end, other parms); 2. alg(beg, end, dest, other parms);3. alg(beg, end, dest, other parms);4.alg(beg, end, beg2, end2, other parms);注:dest 形参是一个迭代器,用于指定存储输出数据的目标对象。学习摘录 125:迭代器的分类 迭代器可通过其所支持的操作来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版城市综合体购房合同配套设施完善补充协议
- 2025年国际旅游线路设计与包机服务合同
- 2025年度新型果树苗批发与种植合作合同范本
- 2025年度驾校场地租赁与学员交通违法处理服务合同
- 2025年度全球货运保险合同标的货物运输风险分担
- 2025年度全球网络安全服务合同
- 2025年度航空航天产业合作合同模板
- 2025年度国际环保材料研发与应用合同
- 2025年度和中介签租赁合同范本:租赁合同备案代理服务协议
- 2025年度体育赛事广告制作与赞助合同
- 2024版全文:中国2型糖尿病预防及治疗指南
- 社会主义发展史(齐鲁师范学院)知到智慧树章节答案
- 课程思政融入高职院校应用文写作课程教学路径探析
- 2024全新钢结构安全培训
- 2025届高三数学一轮复习-分段函数专项训练【含答案】
- 《工程力学》课程教学大纲
- 7.1.2 直观图的画法-【中职专用】高一数学教材配套课件(高教版2021·基础模块下册)
- 皮肤癣菌病的分子诊断工具
- SL+575-2012水利水电工程水土保持技术规范
- 人美版初中美术知识点汇总八年级全册
- 迅雷网盘最最最全影视资源-持续更新7.26
评论
0/150
提交评论