擦除会const_iterator但使用迭代器(非常量)调用

erase gets const_iterator but is called with iterator (non-const)

本文关键字:迭代器 非常 常量 调用 const iterator 擦除      更新时间:2023-10-16

在 C++11 中,std::vector::erase 作为第一个参数const_iterator(较旧的参数带有迭代器):

http://www.cplusplus.com/reference/vector/vector/erase/

但正如您在它使用的示例中所看到的,不cbegin .相反,它与 begin 一起使用。const_iteratoriterator 之间是否存在隐式转换?

是的,iterator std 容器都可以(并且必须)转换为 const_iterator

从标准来看,$23.2.1/4 一般容器要求 [容器.要求.一般] 表 100 — 容器要求:

(强调我的)

X::迭代器

满足前向迭代器要求的任何迭代器类别。 可转换为 X::const_iterator

containers的要求是iterator类型必须隐式转换为const_iterator

请参阅:http://en.cppreference.com/w/cpp/concept/Container

因此,如下所示的内容将起作用:

std::vector<int> v;
.....
std::vector<int>::const_iterator cit = v.begin();