0
我有一個函數返回vector<string>::const_iterator
。當我嘗試使用此返回值作爲vector<string>::erase
的參數時,出現錯誤,表明const_iterator
和iterator
之間的轉換是不可能的。有沒有辦法繞過這個問題而不改變函數的返回值類型?謝謝!使用std :: vector ::使用const_iterators擦除
我有一個函數返回vector<string>::const_iterator
。當我嘗試使用此返回值作爲vector<string>::erase
的參數時,出現錯誤,表明const_iterator
和iterator
之間的轉換是不可能的。有沒有辦法繞過這個問題而不改變函數的返回值類型?謝謝!使用std :: vector ::使用const_iterators擦除
在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
的一員,你可以得到相當於iterator
爲v.begin() + (ci - v.begin())
。
如果你想用它作爲'iterator',你爲什麼要給它一個'const_iterator'返回類型? – Beta
在C++ 11中(你標記的)實際上應該允許 – user1781290
@Beta函數基類將其定義爲一個不允許返回常規迭代器的const函數。 – hovo