c++ - 使用 std::vector::erase 和 const_iterators

标签 c++ c++11 vector iterator

我有一个返回 vector<string>::const_iterator 的函数.当我尝试使用此返回值作为 vector<string>::erase 的参数时我收到 const_iterator 之间的转换错误和 iterator不可能。有什么办法可以在不改变我函数的返回值类型的情况下规避这个问题吗?谢谢!

最佳答案

在 C++11 中,std::vector::erase 的两种变体接受 const_iterator,尽管在​​标准的早期修订版 (C++11 §23.3.6.5 [vector.modifiers]) 中情况并非如此。看起来您要么 (a) 没有将您的代码编译为 C++11,要么 (b) 使用尚未完全更新到 C++11 的标准库。

解决方法相当简单:给定一个引用 vector v 成员的 const_iterator ci,您可以导出等效的 iterator 作为 v.begin() + (ci - v.begin()).

关于c++ - 使用 std::vector::erase 和 const_iterators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226827/

相关文章:

c++ - 寻找一个 constexpr ceil 函数

c++ - 使用 bool 值 vector 是否比动态位集慢?

c++ - 这样的初始化列表在 C++11 中合法吗?

c++ - CMake 声称找到 OpenGL 但找不到 EGL 和 OpenGL::GL

c++ - 当我创建一个 int 指针并实例化一个数组时,该数组在内存中发生了什么?

c++ - #including一个类头没有指定类型

c++ - 使用就地 lambda 进行复杂的初始化,尤其是 const

c++ - 类成员函数的 decltype

Java:多次将元素从 Hashmap 添加到 vector

C++ 奇怪的错误, "no conversion from ' int' 到 'int (__cdecl *)(float,float)' "