为什么将std :: vector :: erase参数更改为const_iterator?

时间:2018-11-04 22:42:38

标签: c++

例如https://en.cppreference.com/w/cpp/container/vector/erase的参数std::vector::erase在C ++ 11中从iterator更改为const_iterator

这令人惊讶;从逻辑上讲,容器确实必须更改那些迭代器指向的数据,实际上,当我实现自己的向量类时,编译器抱怨说我在使用常量指针调用memmove;我通过将参数改回iterator来解决它。

使它们成为const_iterator的背后逻辑是什么?

1 个答案:

答案 0 :(得分:2)

迭代器只说出哪里。向量是非常量的,并且从中被擦除。

这使您能够以一种有成本的方式找到要擦除的位置,只有在实际擦除该位置时,才需要一个非const容器。