一朵小草 2023-03-21 22:21 采纳率: 45.5%
浏览 29
已结题

关于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数据之后。不太懂是为什么

  • 写回答

1条回答 默认 最新

  • 初见~ 2023-03-21 22:24
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别