26.尽可能以iterator代替其const或reverse版本

四种迭代器介绍

</br>
对于container<T>而言,iterator的作用相当于T*,而const_iterator则类似于const T*.
reverse_iterator与const_reverse_iterator同样相当于对应的T*和const T*,和上两种所不同的是,它们的遍历次序是从尾到头。

尽可能不使用其余三种的原因

成员函数形参要求

以vector举例,其insert与erase的样式如下:

1
2
3
iterator insert(iterator position, const T& x);
iterator erase(iterator position);
iterator erase(iterator rangeBegin, iterator rangeEnd);

需要注意的是:这两个函数只接受iterator类型的参数,而不是const_iterator、reverse_iterator或const_reverse_iterator。

四种迭代器之间的相互转换

image_1cav8o342170n1eeha5v1rpge239.png-20.5kB
箭头表明了它们可以执行隐式转换,而且reverse可以调用base成员函数转为iterator(详见Effective STL 28)值得注意的是const迭代器无法转为普通版本,也就是说,当你需要指出插入或者删除位置的元素时,const迭代器几乎没用。

使用iterator的优越性:

  1. 兼容insert与erase
  2. const版本无法隐式转换普通版本,就算能转效率也不是很高
  3. reverse版本转换来的iterator需要相应的调整

何时应该选用reverse呢?比如说你真的需要从后向前遍历的时候。