C++集合运算函数总结
集合A,B。(可以使用数组、list、vector) 头文件:#include<algorithm> 前提:两个集合已经有序。 merge() //归并两个序列,元素总个数不变,只是将两个有序序列归并为一个有序序列。 set_union() //实现求集合A,B的并。 set_difference()//实现求集合A,B的差(即A—B) set_symmetric_difference()//实现求集合A,B的对称差(即(A-B)并(B-A)) set_intersection()//实现求集合A,B交集。 //集合运算 //熊八八 //2013-3-15 #include<iostream> #include<stdio.h> #include<list> #include<algorithm> //set_union求并集 using namespace std; template<class T> void Print(T List) { class T::iterator iter; for(iter=List.begin(); iter!=List.end(); iter++) printf("%d ", *iter); printf("\n"); } int main() { list<int> List_A; list<int> List_B; int temp; printf("Enter 5 integers into List_A:\n"); for(int i=0; i<5; i++) { scanf("%d", &temp); List_A.push_back(temp); } //printf("Enter some integers into List_B:\n"); for(int i=0; i<5; i++) { scanf("%d", &temp); List_B.push_back(temp); } List_A.sort(); List_B.sort(); list<int> List_C(10); //不能将操作后的结果重新放入List_A或者List_B.如果非要如此,可以设一中间变量List_C,先将结果存储至List_C,然后List_A = List_C //merge(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin()); //合并 //set_union(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//并集 //set_difference(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//差集 //set_symmetric_difference(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//对称差 set_intersection(List_A.begin(), List_A.end(), List_B.begin(), List_B.end(), List_C.begin());//交集 printf("List_A contains:\n"); Print(List_A); printf("List_B contains:\n"); Print(List_B); printf("List_C contains:\n"); Print(List_C); system("pause"); return 0; }
set容器使用时这样比较常用吧
set_intersection(x.begin(), x.end(), y.begin(), y.end(), inserter(z, z.end())); ....