使用std :: vector :: erase和const_iterators

时间:2014-01-20 05:28:38

标签: c++ c++11 vector iterator

我有一个返回vector<string>::const_iterator的函数。当我尝试将此返回值用作vector<string>::erase的参数时,我收到错误,指出const_iteratoriterator之间无法进行转换。有没有办法在不改变函数的返回值类型的情况下绕过这个问题?谢谢!

1 个答案:

答案 0 :(得分: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的成员,则可以将等效iterator推导为v.begin() + (ci - v.begin())