考虑下面的代码,
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector<int> value{22, 23, 25, 34, 99};
auto it = find(value.cbegin(), value.cend(), 25);
value.insert(it, 77);
return 0;
}
这里
it
是 const_iterator
。在插入之前,它指向 25
。插入后,它指向 77
。这不会被认为是修改吗? 最佳答案
A const_iterator
阻止您修改迭代器指向的元素,它不会阻止您修改容器本身。
在您的示例中,您正在查找元素 25
的迭代器,并在 77
之前插入 25
。您没有修改值 25
。
vector::insert
总是使插入点和插入点之后的迭代器无效。因此,如果您在示例中在 it
之后取消引用 insert
,则这是未定义的行为。相反,你可以做
it = value.insert(it, 77);
// it points to 77, the newly inserted element
// (it + 1) points to 25
关于c++ - 为什么在使用 const_iterator 时可以在 vector 中插入元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48728000/