#include <iostream>
#include <algorithm>
#include <vector>
#include<stdio.h>
using namespace std;
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
vector<int> v(10);
printf("%d\n",v.size()); // 0 0 0 0 0 0 0 0 0 0
vector<int>::iterator it;
sort (first,first+5); // 5 10 15 20 25
sort (second,second+5); // 10 20 30 40 50
it=set_union (first, first+5, second, second+5, v.begin());
// 5 10 15 20 25 30 40 50 0 0
cout << "union has " << int(it - v.begin()) << " elements.\n";
for(int i=0;i<10;i++)printf("%d\n",v[i]);
return 0;
}
10
union has 8 elements.
5
10
15
20
25
30
40
50
0
0
所以我们可以的出的结论就是set_union要想往vector里面添加数据首先还是应该先排序的,还有就是要申请足够的内存空间。
int main()
{
set<int> a,b,c;
a.insert(1);
a.insert(6);
a.insert(6);
b.insert(2);
b.insert(6);
b.insert(9);
//最后一个参数若使用c.begin()会产生编译错误assignment of read-only localtion.
set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.begin()));
return 0;
}
int main()
{
vector<int> a,b,c;
b.push_back(2);
b.push_back(1);
b.push_back(1);
b.push_back(1);
//最后一个参数若使用c.begin(),运行时会出错“Segmentation fault (core dumped)”.
sort(a.begin(),a.end());
sort(b.begin(),b.end());
set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
printf("%d\n",c.size());
for(int i=0;i<c.size();i++)printf("%d\n",c[i]);
return 0;
}
这个的用法就很像数组的用法,但是不同是加了back_inserter(c);
back_inserter一个成员函数,返回值是back_insert_iterator, 本质上是push_back进行操作的, 返回值back_insert_iterator, 并实现其自增.
所以在数组的时候也是可以用这个函数的,然后就不同返回迭代器的值了,感觉还是有点方便的啊。
set_intersection 这个东西大体上还是和set_union差不多的,但是唯一的不同就是一个并集一个交集,还有就是如果某个数在两个集合里面都出现了,那就输出出现的次数最少的。