考虑下面的代码,

#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;
}

这里 itconst_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/

10-14 13:36