2014-01-20 102 views
0

我有一個函數返回vector<string>::const_iterator。當我嘗試使用此返回值作爲vector<string>::erase的參數時,出現錯誤,表明const_iteratoriterator之間的轉換是不可能的。有沒有辦法繞過這個問題而不改變函數的返回值類型?謝謝!使用std :: vector ::使用const_iterators擦除

+0

如果你想用它作爲'iterator',你爲什麼要給它一個'const_iterator'返回類型? – Beta

+2

在C++ 11中(你標記的)實際上應該允許 – user1781290

+0

@Beta函數基類將其定義爲一個不允許返回常規迭代器的const函數。 – hovo

回答

5

在C++ 11中,std::vector::erase的兩個變體均接受const_iterator,儘管在標準(C++ 11§23.3.6.5[vector.modifiers])的早期版本中並非如此。這似乎是(a)沒有將你的代碼編譯爲C++ 11,或者(b)使用尚未完全更新到C++ 11的標準庫。

解決方法是相當簡單:給定一個const_iterator ci引用矢量v的一員,你可以得到相當於iteratorv.begin() + (ci - v.begin())

相關問題