四种迭代器介绍
</br>
对于container<T>而言,iterator的作用相当于T*,而const_iterator则类似于const T*.
reverse_iterator与const_reverse_iterator同样相当于对应的T*和const T*,和上两种所不同的是,它们的遍历次序是从尾到头。
尽可能不使用其余三种的原因
成员函数形参要求
以vector举例,其insert与erase的样式如下:1
2
3iterator insert(iterator position, const T& x);
iterator erase(iterator position);
iterator erase(iterator rangeBegin, iterator rangeEnd);
需要注意的是:这两个函数只接受iterator类型的参数,而不是const_iterator、reverse_iterator或const_reverse_iterator。
四种迭代器之间的相互转换
箭头表明了它们可以执行隐式转换,而且reverse可以调用base成员函数转为iterator(详见Effective STL 28)值得注意的是const迭代器无法转为普通版本,也就是说,当你需要指出插入或者删除位置的元素时,const迭代器几乎没用。
使用iterator的优越性:
- 兼容insert与erase
- const版本无法隐式转换普通版本,就算能转效率也不是很高
- reverse版本转换来的iterator需要相应的调整
何时应该选用reverse呢?比如说你真的需要从后向前遍历的时候。