Effective_STL 学习笔记(二十六) 尽量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator

每个标准容器类都提供四种迭代器类型,对于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 类型的迭代器,可以使容器的使用更简单,更高效

猜你喜欢

转载自www.cnblogs.com/kidycharon/p/10033060.html
今日推荐