首页 > 解决方案 > 从向量中删除元素时出现未处理的异常

问题描述

我试图找到两个向量的交集。我使用了两个循环,如果第一个循环元素等于第二个循环元素,我将该元素推入向量中,然后删除该元素。但我不断收到错误“未处理的异常”。


#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

void intersect(vector<int>& nums1, vector<int>& nums2)
{
    sort(nums1.begin(), nums1.end());
    sort(nums2.begin(), nums2.end());
    vector<int>v;
    if (nums1.size() > nums2.size())
    {
        for (int i = 0; i < nums1.size(); i++)
        {
            int first = nums1[i];
            for (int j = 0; j < nums2.size(); j++)
            {
                if (first == nums2[j])
                {
                    v.push_back(first);
                    nums2.erase(nums2.begin() + i);  //Getting an error here
                }
            }
        }
    }

    for (int i = 0; v.size(); i++)
        cout << v[i] << " ";
}

int main()
{
    vector<int>nums1 = { 1,2,2,1 };
    vector<int>nums2 = { 2,2 };
    intersect(nums1, nums2);
    return 0;
}

标签: c++arraysvectordata-structures

解决方案


第一次调用给你错误的代码i是 2。因为nums2.begin()第一个元素nums2.begin() + 2是迭代器,所以是第三个元素的迭代器。但nums2没有第三要素。所以你正在尝试erase一个不存在的元素。


推荐阅读