const_iterator 轉成 iterator 的方法
阿新 • • 發佈:2018-01-20
錯誤 string map pre 初始 deque iterator div 頭文件
這種方法非常簡單和直接。為了得到一個與const_iterator指向相同位置的iterator,首先創建一個新的iterator,將它指向容器初始位置,然後取得const_iterator距離容器起始位置的偏移量,並將iterator向前移動相同的偏移量即可。
其中,advance和distance都在<iterator>頭文件中。distance用來計算兩個叠代器之間的距離,advance用來將一個叠代器移動指定的距離。
對於隨機訪問的叠代器(vector、string、deque),這種方法的時間是常數時間。對於雙向叠代器(unordered_map)而言,時間是線性的。
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 的方法