Effective STL 學習筆記 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

1 Iterator 的類型

標準容器提供了四種迭代器,以 conainer<T> 爲例: css

  • itertor:
    形如 T* ,正向增加。
  • const_itertor:
    形如 const T * ,指向內容只讀,正向增加。
  • reverse_itertor:
    形如 T* ,反向增加。
  • const_reverse_itertor:
    形如 const T * ,指向內容只讀,反向增加。

2 迭代器之間的轉換

他們之間的轉換關係以下圖所示: html

iterator_conversion.png

Figure 1: Conversion between iteratorsjava

./images/iterator_conversion.dot c++

其中值得注意的是, reverse_iterator 能夠經過 base() 來轉換到 iterator ,但這個轉換可能並非咱們真正須要的那個。而除此以外,剩餘的兩種迭代器都沒法轉換成 iteratorsql

3 Iterator is Special

瞅一眼 vector<T> 的幾個方法: bash

iterator insert(iterator p, const T& x);
iterator erase(iterator p);
iterator erase(iterator rangebegin, iterator rangeEnd);

這裏用到的都是 iterator函數

4 總結:

Prefer Iterator, 緣由: post

  • 若干函數(插入,刪除等)須要的都是 iterator
  • const_iterator 不能隱式地轉換成 iterator
  • reverse_iteratoriterator 的轉換可能須要迭代器的調整。
相關文章
相關標籤/搜索