###《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 ...
随机推荐
- 我被eclipse的tomcat坑的经历
奇怪的乱码问题: 1.jsp页面utf-8 2.java代码utf-8 3.数据库编码utf-8 4.tomcat server.xml配置URIEncoding="UTF-8" ...
- 防止跨域(jsonp详解)
详见:http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html $("#getJsonpByJquery"). ...
- Java字节码(.class文件)格式详解(一)
原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...
- JavaScript 原型继承开端
1.原型继承本质 就javascript对象系统的实现来讲,对象并没有原型,而构造器有原型(构造器.prototype指向其原型).对象只有构造自某个原型的说法,并没有持有某个原型的说法. ...
- Android大图片裁剪终极解决方案 原理分析
约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...
- 字母A-Z写法
#大写的a-z,ASCII编码 65..90|%{[char]$_} #小写的A-Z 97..122|%{[char]$_} 方法二: ([char[]](97..122) -as [ ...
- BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割
1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...
- 2013 ACM/ICPC Asia Regional Changsha Online J Candies
AC了,但是不知道为什么,但是恶心的不得了~最近写代码,思路都非常清晰,但是代码各种bug~T.T~说说思路吧:二分~330ms~ 小队友fribbi的思路是离线250msAC~ 预处理solve函数 ...
- Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).
The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...
- Spring(AbstractRoutingDataSource)实现动态数据源切换--转载
原始出处:http://linhongyu.blog.51cto.com/6373370/1615895 一.前言 近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目 ...