在以下代码中得到错误..在第38行我得到错误为什么我不知道,但我尝试了很多方面,但它没有解决PLZ解决我的问题使用set_intersection设置给出错误?
#include <iostream>
#include <fstream>
#include <algorithm>
#include<set>
using namespace std;
#define now 5519
int main()
{
set<int> a[now];
set<float>dist[now];
set<int>insect;
//set<int> v(10);
FILE *fwp=fopen("wp02","r");
int w,at,dis;
set<int>::iterator it;
while(1)
{
if(fscanf(fwp,"%d",&w)==EOF)
{
fclose(fwp);
break;
}
else
{
fscanf(fwp,"%d%f\n",&at,&dis);
a[w].insert(at);
dist[w].insert(dis);
}
}
for(int i=0;i<now;i++)
{
if(a[i].size()==0)
continue;
for(int j=i;j<now;j++)
{
if(a[j].size()==0)
continue;
set<int> v;
//it=set_intersection (a[i], a[j], v);
it=set_intersection (a[i],a[i]+a[i].size(), a[j], a[j]+a[j].size(), v);
//it=set_intersection (a[i].begin(),a[i].end(), a[j].begin(), a[j].end(), v.begin());
// v.resize(it-v.begin());
for (it=v.begin(); it!=v.end(); ++it)
{
cout << ' ' << *it;
}
}
}
return 0;
}
答案 0 :(得分:1)
set_intersection的最小可编辑示例(代码的味道):
#include <algorithm>
#include <set>
int main()
{
std::set<int> x[10];
int i = 2;
int j = 3;
std::set<int> v;
std::set_intersection(x[i].begin(), x[i].end(), x[j].begin(), x[j].end(), std::inserter(v, v.begin()));
}
答案 1 :(得分:1)
您应该查看set_intersection
的一些文档,例如cppreference.com或SGI STL
您会看到它不会将std::set
或任何其他容器作为参数
答案 2 :(得分:0)
std::set_intersection
与std::set
毫无关系。该算法在两个范围上运行,并将存在于两者中的每个元素复制到输出流中。每个输入范围由一对迭代器指定;第一个迭代器指向范围中的第一个元素,第二个迭代器指向范围的末尾。这是范围的标准惯例。您可以从任何标准容器以及许多其他位置获取迭代器对。对于标准容器,成员函数begin()
和end()
返回指定容器所持元素范围的迭代器。所以对于任何容器类型:
my_container container;
// stuff objects into container
my_container other_container;
// stuff objects into other_container
my_container intersection;
std::set_intersection(container.begin(), container.end(),
other_container.begin(), other_container.end(),
std::back_inserter(intersection));