###《Effective STL》--Chapter4
点击查看Evernote原文。
#@author: gr
#@date: 2014-09-14
#@email: forgerui@gmail.com
Chapter4 迭代器
Topic 26: iterator
优先于const_iterator
、reverse_iterator
及const_reverse_iterator
。
在一些程序中,需要iterator
的支持,而const_iterator
无法满足要求,所以尽量使用iterator
。
Topic 27: 使用distance
和advance
将容器的const_iterator
转换成iterator
。
使用distance
可以计算两个迭代器(指向同一个容器)之间的距离,使用advance
可以移动。
//const_iterator无法直接转换为iterator,会报错
deque<int>::const_iterator ci;
deque<int>::iterator i (ci);
//使用distance和advance组合去实现
advance(i, distance(i, ci));
所以结论和Topic 26一样,尽量使用iterator
代替const
或reverse
。
Topic 28: 正确理解由reverse_iterator
的base()
成员函数所产生的iterator
的用法
容器类的有些成员函数只支持iterator
,所有有时需要对其它类型进行转换。reverse_iterator
的base()
和iterator
的对应结果依据你的操作而定:
对于插入操作,两者的相对插入位置正好对应。无需进行++,--操作。
vector<int>::reverse_iterator ri = find(v.rbegin(), v.rend(), 3);
vector<int>::iterator i(ri.base());
ve.insert(i, e);
对于删除操作,转换之后,两者则不是删除同一个元素。下面的删除有问题,C和C++都规定从函数返回的指针不应被修改,所以在某些实现下会无法通过编译。
//下面的删除有问题,可能无法编译
ve.erase(--ri.base());
解决方法是在base()
之前进行修改,之后再转换。
ve.erase((++ri).base());
Topic 29: 对于逐个字符的输入请考虑使用istreambuf_iterator
istreambuf_iterator
直接从流的缓冲区中读取下一个字符,不会做安全检查,速度更快,可以提高40%,但只多敲了3个字符。
ifstream inputfile("a.txt");
string fileData(istreambuf_iterator<char>(inputfile), istreambuf_iterator<char>());
###《Effective STL》--Chapter4的更多相关文章
- 《Effective STL》学习笔记
http://www.cnblogs.com/arthurliu/archive/2011/08/07/2108386.html 作者:咆哮的马甲 出处:http://www.cnblogs.com/ ...
- ###《Effective STL》--Chapter3
点击查看Evernote原文. #@author: gr #@date: 2014-09-13 #@email: forgerui@gmail.com Chapter3 关联容器 Topic 22: ...
- ###《Effective STL》--Chapter5
点击查看Evernote原文. #@author: gr #@date: 2014-09-17 #@email: forgerui@gmail.com Chapter5 算法 Topic 30: 确保 ...
- ###《Effective STL》--Chapter6
点击查看Evernote原文. #@author: gr #@date: 2014-09-27 #@email: forgerui@gmail.com Chapter6 函数子.函数子类.函数及其他 ...
- ###《Effective STL》--Chapter7
点击查看Evernote原文. #@author: gr #@date: 2014-08-31 #@email: forgerui@gmail.com Chapter7 在程序中使用STL Topic ...
- ###《Effective STL》--Chapter1
点击查看Evernote原文. #@author: gr #@date: 2014-09-12 #@email: forgerui@gmail.com Chapter1 容器 Topic 4: 调用e ...
- ###《Effective STL》--Chapter2
点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string T ...
- 容器使用的12条军规——《Effective+STL中文版》试读
容器使用的12条军规——<Effective+STL中文版>试读 还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...
- 《Effective STL中文版》前言
<Effective STL中文版>前言 我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...
随机推荐
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- 从Web借鉴UI设计
从Web借鉴UI设计 用户体验已经成为衡量应用软件质量的重要标准.在过去我们可能会惊叹于某个Web应用的华丽界面,现在,随着HTML5的强势登场,各类表现层技术及开发框架的发布,Web与窗体应用的界限 ...
- IDF实验室-python ByteCode writeup
题目地址:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=45 下载来发现是crackme.pyc 可以用unc ...
- 获取Application中的spring容器
方式1: ApplicationContext ac = (ApplicationContext) invocation.getInvocationContext().getApplication() ...
- ant中调用外部ant任务的两种方法
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- C++ Primer 学习笔记_76_模板与泛型编程 --模板定义[续]
模板与泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...
- JavaScript中的Partial Application和Currying
这篇文章是一篇学习笔记,记录我在JS学习中的一个知识点及我对它的理解,知识点和技巧本身并不是我原创的.(引用或参考到的文章来源在文末) 先不解释Partial Application(偏函数应用)和C ...
- CustomViewWith_Image_Text_Video
CustomViewOfTextVideoImage.rar https://github.com/Grishu/CustomViewWith_Image_Text_Video
- VRRP协议具体解释
转帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384 Contents ...
- (转) 如何在JavaScript与ActiveX之间传递数据1
本文研究如何在JS等脚本语言与ActiveX控件之间通信,如何传递各种类型的参数,以及COM的IDispatch接口.使用类似的方法,可以推广到其他所有脚本型语言,如LUA,AutoCad等.本文将研 ...