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

*/-->

div.org-src-container {
font-size: 85%;
font-family: monospace;
}

1 Iterator 的类型

标准容器提供了四种迭代器,以 conainer<T> 为例:

  • itertor:
    形如 T* ,正向增长。
  • const_itertor:
    形如 const T * ,指向内容只读,正向增长。
  • reverse_itertor:
    形如 T* ,反向增长。
  • const_reverse_itertor:
    形如 const T * ,指向内容只读,反向增长。

2 迭代器之间的转换

他们之间的转换关系如下图所示:

Figure 1: Conversion between iterators

./images/iterator_conversion.dot

其中值得注意的是, reverse_iterator 可以通过 base() 来转换到 iterator ,但这个转换可能并不是我们真正需要的那个。而除此之外,剩余的两种迭代器都无法转换成 iterator

3 Iterator is Special

瞅一眼 vector<T> 的几个方法:

iterator insert(iterator p, const T& x);
iterator erase(iterator p);
iterator erase(iterator rangebegin, iterator rangeEnd);

这里用到的都是 iterator

4 总结:

Prefer Iterator, 原因:

  • 若干函数(插入,删除等)需要的都是 iterator
  • const_iterator 不能隐式地转换成 iterator
  • reverse_iteratoriterator 的转换可能需要迭代器的调整。

Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor的更多相关文章

  1. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  2. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  3. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  4. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  5. Effective STL 学习笔记 Item 17: Swap Trick

    假设有若干对象存于一个 vector 中: class Widget; vector<Widget> vw; 后来由于某些原因,从该容器中删除了若干对象(参考erase-remove id ...

  6. Effective STL 学习笔记 Item 16:vector, string & C API

    有时需要支持 C 的接口,但这并不复杂. 对于 vector 来讲, \(v[0]\) 的地址 \(\&v[0]\) 即可作为数组指针传递给 C API: 1: // Legacy C API ...

  7. Effective STL 学习笔记 Item 18: 慎用 vector<bool>

    vector<bool> 看起来像是一个存放布尔变量的容器,但是其实本身其实并不是一个容器,它里面存放的对象也不是布尔变量,这一点在 GCC 源码中 vector<bool> ...

  8. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  9. Effective STL 学习笔记 32 ~ 33

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

随机推荐

  1. pytorch文档阅读(一)

    本章主要针对pytorch0.4.0英文文档的前两节,顺序可能有些不一样: torch torch.Tensor 张量 Tensors Data type CPU tensor GPU tensor ...

  2. ubuntu vim 配置

    set nuset autoindent cindentmap<F9> :w<cr> :!g++ -O2 -o %< % -Wall<cr>map<F1 ...

  3. 阿里云上部署了zabbix,突然无法收到报警邮件的解决办法

    在阿里云上部署了zabbix,一直能正常接收到zbx发来的报警邮件(报警邮箱是163的),不知是什么原因,突然无法接收到报警邮件了. 但在服务器上手动执行echo "hello"| ...

  4. python基础之02列表/元组/字典/set集合

    python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...

  5. 百度定位api 定位不准修正

    https://www.zhihu.com/question/38313555   在安卓开发中需要设置 setCoorType("bd09lsetCoorType("bd09ll ...

  6. linux查看tomcat日志

    声明:以上内容均为转载,个人对这块知识搜罗之后放在一起,非原创,以后这块有问题还会继续添加. Tomcat 日志分为下面5类: catalina . 相当命令行输出日志 localhost . 相当于 ...

  7. vue 混入的理解

  8. StringBuffer类和String 类的 equals 和 ==

    注意: equals(Object obj)equals方法的参数是任意对象 Object类的equals方法就是用==判断的,即判断两个对象是否为同一个对象 StringBuffer类没有重写equ ...

  9. SQL语句(十九)——存储过程(练习)

    select * From Student select * From Course select * from SC --INSERT INTO SC (Sno, Cno, Grade) --VAL ...

  10. vscode nodejs智能提示功能

    1.依赖一些第三方的插件,先安装typings这个包,如果使用的是淘宝镜像,输入cnpm.cmd执行: cnpm i typings -g //cnpm install typings -global ...