条款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 //非常罕见,慎用

最新文章

  1. SAS学习笔记&lt;一&gt;
  2. CrashHandler: java.lang.NullPointerException
  3. Linux C 单链表 读取文件 并排序 实例并解释
  4. javaweb学习总结二十三(servlet开发之线程安全问题)
  5. JSON对象(自定义对象)
  6. python网络编程之网络主机信息
  7. 过程 : 概念 : 结构 jobbox jobPost
  8. SQL 游标的应用
  9. idea中的汉语注释出现乱码的解决方案
  10. SpringCloud学习笔记(6)——Eureka高可用
  11. Nginx 自定义404、500、502 页面
  12. windows编程命名规则
  13. 把http网站变成https网站
  14. LCA Tarjan方法
  15. 关于pdfbox操作pdf的分享链接手长
  16. Linux下NFS的搭建与配置
  17. 一个小时学会PHP
  18. git杂记:忽略ssl认证
  19. gearman 简单试用
  20. 07-django项目

热门文章

  1. codevs 1313 质因数分解
  2. office word excel等图标显示异常
  3. 关于CSS3三角的实现
  4. Codeforces Round #277.5 (Div. 2)-C. Given Length and Sum of Digits...
  5. |chromosomal walk |zoo blot|鉴定疾病gene|
  6. Java递归获取部门树 返回jstree数据
  7. JS原型链(一)
  8. WINDOWS下使用Mysql 中碰到的问题记录
  9. DNS服务-主从架构搭建
  10. verilog behavioral modeling --loop statement