1. 程式人生 > >Effective_STL 學習筆記(二十七) 用 distance 和 advance 把 const_iterator 轉化成 iterator

Effective_STL 學習筆記(二十七) 用 distance 和 advance 把 const_iterator 轉化成 iterator

 

並不存在從 const_iterator 到 iterator 之間的隱式轉換

一種安全的、可移植的方法獲取他所對應的 iterator:

1   typedef deque<int> IntDeque;     // 方便的typedef
2   typedef IntDeque::iterator Iter;
3   typedef IntDeque::const_iterator ConstIter;
4 
5   InDeque d;
6   ConstIter ci;
7   . . .
8   Iter i( d.begin() );           //
初始化 i 為 d.begin() 9   advance( i, distance(i, ci) );    // 把 i 移到指向 ci 的位置

要得到與 const_iterator 指向同一位置的 iterator,首先將 iterator 指向容器的起始位置,然後把它向前移到和 const_iterator 距離容器起始位置的偏移量一樣的位置即可。

這個任務得到兩個函式模板 advance 和 distance 的幫助,他們都在<iterator>中宣告

distance 返回兩個指標指向同一個容器的 iterator 之間的距離,

advance 則用於將一個 iterator 移動到指定的距離,

如果i和ci指向同一個容器,表示式advance(i, distance(i, ci))會將i移動到與 ci 相同的位置 

顯示的指明 distance 呼叫的模板引數型別

1   advance( i, distance<ConstIter>(i, ci) );