每个标准容器类都提供四种迭代器类型,对于container<T>而言:
1 iterator // 的作用相当于T*, 2 const_iterator // 相当于 const T*(也可 T const*) 3 reverse_iterator // 相当于 T* 4 const_reverse_iterator // 相当于 const T*
有些方法只接受 iterator 类型的参数
1 iterator insert( iterator position, const T& x ); 2 iterator erase ( iterator position ); 3 iterator erase ( iterator rangeBegin, iterator rangeEnd );
图片显示了从iterator到const_iterator、从iterator到reverse_iterator和从reverse_iterator到const_reverse_iterator可以进行隐式转换。
reverse_iterator 可以通过调用 base 成员函数转换为 iterator
const_reverse_iterator 可以通过 base 成员函数转换为 const_iterator
但是 const_iterator 转换得到一个 iterator,也无法从 const_reverse_iterator 得到 reverse_iterator
尽量使用 iterator 取代 const 或者 reverse 类型的迭代器:
1. insert 和 erase 的一些版本要求 iterator,如果调用这些函数就必须产生 iterator
2. 不可能把 const_iterator 隐式转换成 iterator
3. 从 reverse_iterator 转换而来的 iterator 在转换之后可能需要相应的调整
所以尽量使用 iterator 代替 const 或 reverse 类型的迭代器,可以使容器的使用更简单,更高效