1. 程式人生 > >Effective_STL 學習筆記(二十六) 儘量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator

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 型別的迭代器,可以使容器的使用更簡單,更高效