1. 程式人生 > >const_iterator 轉成 iterator 的方法

const_iterator 轉成 iterator 的方法

錯誤 string map pre 初始 deque iterator div 頭文件

vector<int> vi;
typedef vector<int>::iterator Iter;
typedef vector<int>::const_iterator ConstIter;
Iter i;
ConstIter ci;
使用強制轉換 i = (const_cast<Iter>(ci)) 會造成編譯錯誤,不能將const_iterator強制轉換成iterator。 在STL中,正確的轉換方法是:
i = vi.begin();
advance(i, distance<ConstIter>(i,ci) );
這種方法非常簡單和直接。為了得到一個與const_iterator指向相同位置的iterator,首先創建一個新的iterator,將它指向容器初始位置,然後取得const_iterator距離容器起始位置的偏移量,並將iterator向前移動相同的偏移量即可。 其中,advance和distance都在<iterator>頭文件中。distance用來計算兩個叠代器之間的距離,advance用來將一個叠代器移動指定的距離。 對於隨機訪問的叠代器(vector、string、deque),這種方法的時間是常數時間。對於雙向叠代器(unordered_map)而言,時間是線性的。

const_iterator 轉成 iterator 的方法