1.list的迭代器就是封裝了節點指針的類
2.迭代器失效
迭代器失效即迭代器封裝的節點指針無效 。因為 list 的底層結構為帶頭結點的雙向循環鏈表 ,因此 在 list 中進行插入時是不會導致 list 的迭代 器失效的,只有在刪除時才會失效,并且失效的只是指向被刪除節點的迭代器,其他迭代器不會受到影響
3.list的反向迭代器實現
template<class Iterator>
class ReverseListIterator
{// 注意:此處typename的作用是明確告訴編譯器,Ref是Iterator類中的類型,而不是靜態成員變量// 否則編譯器編譯時就不知道Ref是Iterator中的類型還是靜態成員變量// 因為靜態成員變量也是按照 類名::靜態成員變量名 的方式訪問的
public:typedef typename Iterator::Ref Ref;typedef typename Iterator::Ptr Ptr;typedef ReverseListIterator<Iterator> Self;
public://// 構造ReverseListIterator(Iterator it): _it(it){}//// 具有指針類似行為Ref operator*(){Iterator temp(_it);--temp;return *temp;}Ptr operator->(){ return &(operator*());}//// 迭代器支持移動Self& operator++(){--_it;return *this;}Self operator++(int){Self temp(*this);--_it;return temp;}Self& operator--(){++_it;return *this;}Self operator--(int){Self temp(*this);++_it;return temp;}//// 迭代器支持比較bool operator!=(const Self& l)const{ return _it != l._it;}bool operator==(const Self& l)const{ return _it != l._it;}Iterator _it;
};
反向迭代器和正向迭代器相比,只是++和--的方向變了,因此反向迭代器的實現思路是適配器,即:反向迭代器內部可以包含一個正向迭代器,對正向迭代器的接口進行包裝即可。