【发布时间】:2021-08-31 10:08:03
【问题描述】:
我需要找到两个数组的交集,并打印出两个数组交集的元素个数。我还必须考虑两个数组中的任何重复元素。因此,我决定通过将两个数组转换为集合来处理重复元素,然后取两个集合的交集。但是,我在运行代码时遇到了分段错误。不知道是哪里发生的,有什么办法解决吗?
#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;
}
【问题讨论】:
-
你的向量是空的,所以这会尝试将值写入无效索引。你可能想要
back_inserter。 -
由于
v为空,v.begin()返回的结果与无法引用的v.end()相同。您需要调整矢量v的大小或使用std::back_inserter之类的东西。我还建议您阅读有关std::set_intersection的更多信息。
标签: c++ arrays stl segmentation-fault set