Effective_STL 學習筆記(二十六) 儘量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator
阿新 • • 發佈:2018-11-28
每個標準容器類都提供四種迭代器型別,對於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, constT& 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 型別的迭代器,可以使容器的使用更簡單,更高效