条款26:iterator 优先于 const_iterator, reverse_iterator, const_reverse_iterator

iterator, reverse_iterator 对应于 T*
const_iterator, const_reverse_iterator 对应于 const T*

尽量使用 iterator 迭代器:
insert和erase函数要求使用 iterator,const 和 reverse 型迭代器都不能满足要求
隐式地从 const_iterator 转为 iterator 是不可能的

注:减少混用不同类型的迭代器,尽量使用 iterator

条款27:使用 distance 和 advance 将容器的 const_iterator 显示转换为 iterator

从 const_iterator 到 iterator 不存在隐式转换,使用 const_cast 强制转换是编译错误的

typedef vector<int>::iterator Iter;
typedef vector<int>::const_iterator constIter;
...
vector<int> vec;
Iter it(vec.begin()); //传建一个 iterator 指向 vec起始位置
constIter ci;
advance(it, distance(it,ci)); //仍然错误,参数二义性
//distance 取得两个迭代器(这两个迭代器必须指向同一个容器)之间的距离
//advance 将一个迭代器移动指定的距离

上述转换仍然不能通过编译,因为 distance原型为 distance(InputIterator first, InputIterator last);
调用distance(it, ci)时不能统一两个迭代器类型(it和ci类型不同),无法推断出InputIterator的实际类型(函数参数推导时的二义性问题)
所以此时调用distance时必须排除二义性,只有 non-const 向 const 转换

advance(it, distance<constIter>(it, ci));
条款28:正确理解 reverse_iterator的base()成员函数 //非常少用 reverse_iterator 迭代器
条款29:对于逐个字符的输入考虑使用 istreambuf_iterator //非常罕见,慎用

STL学习笔记(四) 迭代器的更多相关文章

  1. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  2. STL学习笔记(迭代器配接器)

    Reverse(逆向)迭代器 Reverse迭代器是一种配接器. 重新定义递增运算和递减运算.使其行为正好倒置. 如果你使用这类迭代器,算法将以逆向次序处理元素.所有标准容器都允许使用Reverse迭 ...

  3. STL学习笔记(迭代器相关辅助函数)

    advance()可令迭代器前进 #include <iterator> void advance(InputIterator& pos,Dist n); 面对Random Acc ...

  4. STL学习笔记(迭代器类型)

    迭代器类型 迭代器是一种“能够遍历某个序列内的所有元素”的对象.它可以透过与一般指针一致的接口来完成自己的工作. 不同的迭代器具有不同的”能力“(行进和存取能力) Input迭代器 Input迭代器只 ...

  5. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  6. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  7. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  8. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  9. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

随机推荐

  1. 打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例

    今年6月SAP发布C/4HANA之后,有顾问朋友们在微信公众号后台留言,询问C/4HANA如何同SAP的数字化核心S/4HANA系统结合起来,从而打通企业的前后端业务,帮助企业实现数字化转型. 有的顾 ...

  2. python代理检测

    import socket,threading,os,sys,queue,re socket.setdefaulttimeout(5) path=sys.path[0] if os.path.isfi ...

  3. 万事先问『为什么』 what why how

    万事先问『为什么』! 遇到问题时,很多人的行为模式顺序是,先问『做什么』,『怎么做』,他们从来不问『为什么』,他们对根源性问题很模糊. 而聪明人则是先问『为什么』,再去构建『怎么做』,而『做什么』就是 ...

  4. php接受axios数据

    var params = { username: 'admin', password: '123456' } axios.post('test.php', params).then(res => ...

  5. Javascript 日期格式化

    Javascript 日期格式化 需求: 给出:日期 .格式,根据日期格式进行输出. Date.prototype.Format = function (fmt) { //author: meizz ...

  6. 关于img

    为img添加属性max-width min-height之类的属性可以对图片溢出部分实行自动裁剪功能 非常方便!!!!!!!!!(仅适用于那些原始图片大于max-width,max-height的图片 ...

  7. Salt Master报错:Minion did not return. [No response]

    在salt master端执行salt ‘*’ test.ping时,某一节点出现如下报错:Minion did not return. [No response] 登陆到这一节点查看minion的日 ...

  8. robotframework接口测试实例

    *** Settings *** Library Collections Library RequestsLibrary *** Test Cases *** test Create Session ...

  9. javaEE(13)_jdbc框架

    一.使用模板方法设计模式简化开发 模板方法设计模式,执行一个程序有很多步骤,将每次都要执行的共有的提取出来放到一个抽象父类中,变化的部分通过让子类传递参数过来或将这部分抽象为抽象方法让子类通过继承的方 ...

  10. React中 checkbox 与 label 标签的搭配

    用<label>标签替代checkbox的点击样子,点击<label>实际上就是点击checkbox checkbox的checked值会跟着一起变 <input typ ...