用erase删除元素后迭代器会失效

在尝试计算两个整数数组的交集时,使用迭代器遍历并删除相同元素时出现了AddressSanitizer负大小参数错误。错误发生在尝试删除元素后继续迭代的过程中,可能由于删除操作导致迭代器失效。问题在于同时删除了`it1`和`it2`,而`it2`可能已因`it1`的删除变为无效。解决方案可能是只删除一个迭代器指向的元素,然后安全地移动另一个迭代器。
摘要由CSDN通过智能技术生成

做一道求两数组交集的题目时我用迭代器遍历两个数组,并在迭代中用了erase操作,有了下面的报错

=================================================================
==42==ERROR: AddressSanitizer: negative-size-param: (size=-120)
    #5 0x7f52c5b84082  (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
0x602000000114 is located 4 bytes inside of 8-byte region [0x602000000110,0x602000000118)
allocated by thread T0 here:
    #6 0x7f52c5b84082  (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
==42==ABORTING

错误代码如下

for(vector<int>::iterator it1=nums1.begin();it1 !=nums1.end();)
        {
            for(vector<int>::iterator it2=nums2.begin();it2 !=nums2.end();)
            {
                if(*it1==*it2)
                {
                    com.push_back(*it1);
                    nums1.erase(it1);
                    nums1.erase(it2);
                    continue;
                }
                it2++;

            }
            it1++;
        }

补充一点 可以利用迭代器修改vector元素

vector<int>v1;
v1.push_back(10);
vector<int>::iterator it = v1.begin();
*it = 12;
cout<<*it;

v1先插入的元素10被修改为了12

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值