点击查看Evernote原文

#@author:       gr
#@date: 2014-09-14
#@email: forgerui@gmail.com

Chapter4 迭代器

Topic 26: iterator优先于const_iteratorreverse_iteratorconst_reverse_iterator

  在一些程序中,需要iterator的支持,而const_iterator无法满足要求,所以尽量使用iterator

Topic 27: 使用distanceadvance将容器的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代替constreverse

Topic 28: 正确理解由reverse_iteratorbase()成员函数所产生的iterator的用法

  容器类的有些成员函数只支持iterator,所有有时需要对其它类型进行转换。reverse_iteratorbase()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的更多相关文章

  1. 《Effective STL》学习笔记

    http://www.cnblogs.com/arthurliu/archive/2011/08/07/2108386.html 作者:咆哮的马甲 出处:http://www.cnblogs.com/ ...

  2. ###《Effective STL》--Chapter3

    点击查看Evernote原文. #@author: gr #@date: 2014-09-13 #@email: forgerui@gmail.com Chapter3 关联容器 Topic 22: ...

  3. ###《Effective STL》--Chapter5

    点击查看Evernote原文. #@author: gr #@date: 2014-09-17 #@email: forgerui@gmail.com Chapter5 算法 Topic 30: 确保 ...

  4. ###《Effective STL》--Chapter6

    点击查看Evernote原文. #@author: gr #@date: 2014-09-27 #@email: forgerui@gmail.com Chapter6 函数子.函数子类.函数及其他 ...

  5. ###《Effective STL》--Chapter7

    点击查看Evernote原文. #@author: gr #@date: 2014-08-31 #@email: forgerui@gmail.com Chapter7 在程序中使用STL Topic ...

  6. ###《Effective STL》--Chapter1

    点击查看Evernote原文. #@author: gr #@date: 2014-09-12 #@email: forgerui@gmail.com Chapter1 容器 Topic 4: 调用e ...

  7. ###《Effective STL》--Chapter2

    点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string T ...

  8. 容器使用的12条军规——《Effective+STL中文版》试读

    容器使用的12条军规——<Effective+STL中文版>试读     还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...

  9. 《Effective STL中文版》前言

    <Effective STL中文版>前言     我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...

随机推荐

  1. 我被eclipse的tomcat坑的经历

    奇怪的乱码问题: 1.jsp页面utf-8 2.java代码utf-8 3.数据库编码utf-8 4.tomcat server.xml配置URIEncoding="UTF-8" ...

  2. 防止跨域(jsonp详解)

    详见:http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html $("#getJsonpByJquery"). ...

  3. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  4. JavaScript 原型继承开端

    1.原型继承本质       就javascript对象系统的实现来讲,对象并没有原型,而构造器有原型(构造器.prototype指向其原型).对象只有构造自某个原型的说法,并没有持有某个原型的说法. ...

  5. Android大图片裁剪终极解决方案 原理分析

    约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...

  6. 字母A-Z写法

    #大写的a-z,ASCII编码 65..90|%{[char]$_}     #小写的A-Z  97..122|%{[char]$_}    方法二: ([char[]](97..122) -as [ ...

  7. BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  8. 2013 ACM/ICPC Asia Regional Changsha Online J Candies

    AC了,但是不知道为什么,但是恶心的不得了~最近写代码,思路都非常清晰,但是代码各种bug~T.T~说说思路吧:二分~330ms~ 小队友fribbi的思路是离线250msAC~ 预处理solve函数 ...

  9. Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).

    The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...

  10. Spring(AbstractRoutingDataSource)实现动态数据源切换--转载

    原始出处:http://linhongyu.blog.51cto.com/6373370/1615895 一.前言 近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目 ...