首页 > 解决方案 > 计算两组交集时出现分段错误

问题描述

我需要找到两个数组的交集并打印出两个数组交集的元素数。我还必须考虑两个数组中的任何重复元素。因此,我决定通过将两个数组转换为集合来处理重复元素,然后取两个集合的交集。但是,我在运行代码时遇到了分段错误。我不确定这发生在哪里,有什么方法可以解决这个问题?

#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
int NumberofElementsInIntersection (int a[], int b[], int n, int m ){
        // Your code goes here
        int i=0,j=0,count=0;
        set<int> s1,s2;
        vector<int> v;
        vector<int>::iterator it;
        for(i=0;i<n;i++)
            s1.insert(a[i]);
        for(i=0;i<m;i++)
            s2.insert(b[i]);
       it=set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),v.begin());
       return (it-v.begin());
}

int main(){
    int a[] = {1, 2, 3, 4, 5, 6};
    int b[] = {3, 4, 5, 6, 7};
    cout<<NumberofElementsInIntersection(a,b,6,5);
    return 0;
}

标签: c++arraysstlsegmentation-faultset

解决方案


请参阅https://en.cppreference.com/w/cpp/algorithm/set_intersection

您的向量迭代器不会调整向量的大小以添加新元素。您应该使用 aback_inserter代替。

//also needs #include <iterator>
int NumberofElementsInIntersection (int a[], int b[], int n, int m ){
        // Your code goes here
        int i=0;
        set<int> s1,s2;
        vector<int> v;
        for(i=0;i<n;i++)
            s1.insert(a[i]);
        for(i=0;i<m;i++)
            s2.insert(b[i]);
       set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(v));
       return v.size();
}

推荐阅读