天天看點

27 使用distance和advance将容器的const_iterator轉換成iterator

大多數情況下,将const_iterator強制轉換成iterator不能通過編譯,利用const_cast、reinterpret_cast、static_cast 甚至C語言的強制類型轉換。 對于vector和string也許能通過編譯,隻針對const_iterator,而reinterpret_cast、static_cast仍然不行。 可以使用advance和distance将const_iterator 轉換成 iterator: 僞代碼:

typedef deque<int> IntDeque;
typedef IntDeque::iterator iter;
typedef IntDeque::const_iterator ConstIter;
IntDeque d;
ConstIter ci;
Iter i(d.begin());
advance(i,distance<ConstIter>(i,ci)); //distance用于取得兩個疊代器的距離,advance移動到指定的距離
           

這種技術的效率取決于容器,對随機通路的疊代器(vector string deque)是常量時間操作。 對雙向疊代器(其他标準容器,以及散列)是線性時間的操作。

繼續閱讀