关于c++容器的问题



int main()
{
    vector<int>iv = {1,3,7,5,7,8,4,3,5,9};
    int val = 7;
    auto iter = iv.begin(),mid = iv.begin() + iv.size() / 2;

    while (iter != mid)
    {
        if (*iter==val)
        {
            iter=(iv.insert(iter, 2 * val))+2;

        }
        else
        {
            iter=++iter;

        }
    }

    for (auto a : iv)
    {
        cout << a << " ";
    }
    return 0;
} 

这段代码想在容器中找到等于7的元素,然后在他前面插入14最后输出。

逐语句调试我发现,它执行到第四次while循环报错,也就是在第一次insert数据之后。不太懂是为什么

在第一次insert之后,迭代器iter指向的元素变成了14,但是在执行iter=(iv.insert(iter, 2 * val))+2;时,由于insert操作可能会导致容器中的元素地址发生改变,因此需要重新获取iter的值,而不是直接加2。

正确的写法应该是iter = iv.insert(iter, 2 * val) + 1;