Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Table of Contents
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_iterator 到 iterator 的转换可能需要迭代器的调整。
(转载请注明出处,使用许可:署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 。)