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;