



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+ Primer 第11章学习笔记第11章:泛型算法标准库提供一组不依赖特定的容器类型的算法作用在不同类型的容器和不同类型的元素上。学习摘录113:算法重要性质算法也许会改变存储在容器中的元素的值,也许会在容器内移动元素。但是,算法从不直接添加或删除元素。如果需要添加或删除元素,则必须使用容器操作。第二节:初窥算法 #include / 使用泛型算法 #include / 泛化的算术算法(generalized numeric algorithm)学习摘录114:迭代器实参类型大多数算法(前两个参数指定范围):通常:泛型算法都是在标记容器(或其他序列)内的元素范围的迭代器上操作的。标记范围的两个实参类型必须精确匹配,而迭代器本身必须标记一个范围:它们必须指向同一个容器中的元素(或者超出容器末端的下一位置),并且如果两者不相等,则第一个迭代器通过不断地自增,必须可以到达第二个迭代器。有些算法(带有两对迭代器参数)每对迭代器中,两个实参的类型必须精确匹配,但不要求两对之间的类型匹配。当元素存储在不同类型的序列中时,只要这两个序列中的元素可以比较即可。第三节:再谈迭代器C+语言还提供了另外三种迭代器学习摘录115:三种容器的简单介绍插入迭代器(insert iterator):这类迭代器与容器绑定在一起,实现在容器中插入元素的功能。iostream迭代器(iostream iterator):这类迭代器可与输入或输出流绑定在一起,用于迭代遍历所关联的IO流。反向迭代器(reverse iterator):这类迭代器实现向后遍历,而不是向前遍历。学习摘录116:三种插入迭代器这里有三种插入器,其差别在于插入元素的位置不同:1. back_inserter, 创建使用push_back实现插入迭代器2. front_inserter, 使用push_front实现插入。3. insert, 使用insert实现插入操作。学习摘录117:三种inserter的综合应用在使用front_inserter时,元素始终在容器的第一个元素前面插入。使用inserter时,元素则在指定位置前面插入。list ilst, ilst2, ilst3; / empty lists/ after this loop ilst contains: 3 2 1 0for (list:size_type i = 0; i != 4; +i) ilst.push_front(i);/ after copy ilst2 contains: 0 1 2 3 / 与原容器顺序相反copy(ilst.begin(), ilst.end(), front_inserter(ilst2);/ after copy, ilst3 contains: 3 2 1 0 / 与原容器顺序没变copy(ilst.begin(), ilst.end(), inserter(ilst3, ilst3.begin() );学习摘录118:iostream迭代器的构造函数istream_iterator in(strm); 创建从输入流strm中读取T类型对象的istream_iterator对象istream_iterator in; istream_iterator 对象的超出末端迭代器ostream_iterator in(strm); 创建将T类型的对象写到输出流strm的ostream_iterator对象ostream_iterator in(strm, delim); 创建将T类型的对象写到输出流strm的ostream_iterator 对象,在写入过程中使用delim作为元素的分隔符。delim是以空字符结束的字符数组。学习摘录119:流迭代器的定义istream_iterator cin_in(cin); / reads ints from cinistream_iterator end_of_stream; / end iterator value/ writes Sales_items from the ofstream named outfile/ each element is followed by a spaceofstream outfile;ostream_iterator output(outfile, “ “);学习摘录120:istream_iterator对象上的操作下面的程序,衔从cin中读取int型数据,然后,使用eof作为结束符;在循环中,从cin中读取int型数据,并将读入的内容保存在vec中,再实现自增。istream_iterator in_iter(cin); / read ints from cinistream_iterator 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 next value / dereference reads next value from the istream vec.push_back(*in_iter+);也能直接用构造函数的方法新建对象:如下istream_iterator in_iter(cin); / read ints from cinistream_iterator eof; / istream “end” iteratorvector vec(in_iter, eof); / construct vec from an iterator range学习摘录121:ostream_iterator对象的使用可使用ostream_iterator对象将一个值序列写入流中,其操作的过程与使用迭代器在将一个组值逐个赋给容器中的元素相同。/ write one string per line to the standard outputostream_iterator out_iter(cout, “n”);/ read strings from standard input and the end iteratoristream_iterator in_iter(cin), 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:程序经测试,每当输入一行字符后,则在下次输入另一行字符后显示上一行输入的字符。该程序可从while语句入手去想,逐行输入,放入in_iter,之后out_iter读取并显示。解引操作符能够使用数据。学习摘录122:与算法一起使用迭代器先看下面的例子:istream_iterator cin_it(cin); / reads ints from cinistream_iterator end_of_stream; / end iterator value/ initialize vec from the standard input:vector vec (cin_it, end_of_stream);sort(vec.begin(), vec.end() );/ writes ints to cout using “ “ as the delimiterostream_iterator output(cout, “ “);/ write only the unique elements in vec to the standard outputunique_copy(vec.begin(), vec.end(), output);摘录有想122:以前总是看不懂这类程序,我想,现在看完这章的内容后,基本上还是理解了这类程序写的是什么了。前两行不断输入,直到遇到结束符,第三行,将输入的全部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.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年技术合同登记员招聘笔试模拟题及答案
- 拆除服务合同示例
- 初中数学趣味习题设计与解析教案
- 加密条款协议
- 2025年行业协会培训部招聘笔试高频错题及答案
- 委托进口销售协议
- 企业内训师资质评定标准
- 2025年中央机关及其直属机构公务员录用考试(国考)预测试题及答案
- 医院病房设备采购与租赁协议
- 农业经济管理责任及财务管理合同
- MissionPlanner地面站操作使用文档
- 中级采气工操作技能鉴定要素细目表
- 油水气井带压井作业操作规程及工艺技术要求
- (33)-钠钾泵细胞生物学
- 配电室巡检记录表
- 紧急宫颈环扎术的手术指征及术后管理
- GB/T 242-2007金属管扩口试验方法
- 政治理论水平任职资格考试题库
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 贫困户访谈记录
评论
0/150
提交评论