STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference

includes,set_intersection,set_union,set_difference,set_symmetric_difference都是集合论中的操作。这些算法都假定指定区间类的元素已经有序。

includes:A∈B

set_intersection:A∩B

set_union:A∪B

set_difference:A-B

set_symmetric_difference:(A-B)∪(B-A)


1,includes

声明:

  1. #include   
  2. template <class inputItr1, class inputItr2>  
  3. bool includes(inputItr1 first1, inputItr1 last1, inputItr2 first2, inputItr2 last2);  
  4. template <class inputItr1, class inputItr2, class binaryPredicate>  
  5. bool includes(inputItr1 first1, inputItr1 last1, inputItr2,binaryPredicate op);  

示例代码:

  1. #include   
  2. #include   
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9.   
  10. #include   
  11.   
  12. using namespace std;  
  13.   
  14. int main() {  
  15.     char setA[5] = {'A','B','C','D','E'};  
  16.     char setB[10] = {'A','B','C','D','E','F','I','J','K','L'};  
  17.     char setC[5] = {'A','E','I','O','U'};  
  18.   
  19.     ostream_iterator<char> screen(cout, " ");  
  20.     cout << "setA:" << endl;  
  21.     copy(setA,setA+5,screen);  
  22.     cout << endl;  
  23.     cout << "setB:" << endl;  
  24.     copy(setB,setB+10,screen);  
  25.     cout << endl;  
  26.     cout << "setC:" << endl;  
  27.     copy(setC,setC+5,screen);  
  28.     cout << endl;  
  29.   
  30.     if (includes(setB,setB+10,setA,setA+5))  
  31.     {  
  32.         cout << "setA is a subset of setB" << endl;  
  33.     } else {  
  34.         cout << "setA is not a subset of setB" << endl;  
  35.     }  
  36.   
  37.     if (includes(setB,setB+10,setC,setC+5))  
  38.     {  
  39.         cout << "setC is a subset of setB" << endl;  
  40.     } else {  
  41.         cout << "setC is not a subset of setB" << endl;  
  42.     }  
  43.   
  44.     return 0;  
  45. }  

运行结果:

charList:
a b c d e
charList:
A B C D E
list
2 8 5 1 7 11 3
4 16 10 2 14 22 6
list
4 16 10 2 14 22 6


2,set_intersection,set_union

声明:

  1. #include   
  2. template <class inputItr1, class inputItr2,class outputItr>  
  3. outputItr set_intersection(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);  
  4. template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>  
  5. outputItr set_intersection(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);  
  6.   
  7. template <class inputItr1, class inputItr2,class outputItr>  
  8. outputItr set_union(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);  
  9. template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>  
  10. outputItr set_union(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);  

示例代码:

  1. #include   
  2. #include   
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9.   
  10. #include   
  11.   
  12. using namespace std;  
  13.   
  14. int main() {  
  15.     int setA[5] = {2,4,5,7,8};  
  16.     int setB[7] = {1,2,3,4,5,6,7};  
  17.     int setC[5] = {2,5,8,8,15};  
  18.     int setD[6] = {1,4,4,6,7,12};  
  19.     int AunionB[10];  
  20.     int AunionC[10];  
  21.     int BunionD[15];  
  22.     int AintersectB[10];  
  23.     int AintersectC[10];  
  24.   
  25.     int * lastElement;  
  26.     ostream_iterator<int> screen(cout," ");  
  27.     cout << "setA:" << endl;  
  28.     copy(setA,setA+5,screen);  
  29.     cout << endl;  
  30.     cout << "setB:" << endl;  
  31.     copy(setB,setB+7,screen);  
  32.     cout << endl;  
  33.     cout << "setC:" << endl;  
  34.     copy(setC,setC+5,screen);  
  35.     cout << endl;  
  36.     cout << "setD:" << endl;  
  37.     copy(setD,setD+6,screen);  
  38.     cout << endl;  
  39.   
  40.     // set_union  
  41.     lastElement = set_union(setA,setA+5,setB,setB+7,AunionB);  
  42.     cout << "AunionB:" << endl;  
  43.     copy(AunionB,lastElement,screen);  
  44.     cout << endl;  
  45.   
  46.     lastElement = set_union(setA,setA+5,setC,setC+5,AunionC);  
  47.     cout << "AunionC:" << endl;  
  48.     copy(AunionC,lastElement,screen);  
  49.     cout << endl;  
  50.   
  51.     lastElement = set_union(setB,setB+7,setD,setD+6,BunionD);  
  52.     cout << "BunionD:" << endl;  
  53.     copy(BunionD,lastElement,screen);  
  54.     cout << endl;  
  55.   
  56.     // set_intersection  
  57.     lastElement = set_intersection(setA, setA+5,setB,setB+7,AintersectB);  
  58.     cout << "AintersectB:" << endl;  
  59.     copy(AintersectB,lastElement,screen);  
  60.     cout << endl;  
  61.   
  62.     lastElement = set_intersection(setA, setA+5,setC,setC+5,AintersectC);  
  63.     cout << "AintersectC:" << endl;  
  64.     copy(AintersectC,lastElement,screen);  
  65.     cout << endl;  
  66.     return 0;  
  67. }  

运行结果:

charList:
a b c d e
charList:
A B C D E
list
2 8 5 1 7 11 3
4 16 10 2 14 22 6
list
4 16 10 2 14 22 6


3 set_difference,set_symmetric_difference

声明:
  1. #include   
  2. template <class inputItr1, class inputItr2,class outputItr>  
  3. outputItr set_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);  
  4. template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>  
  5. outputItr set_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);  
  6.   
  7. template <class inputItr1, class inputItr2,class outputItr>  
  8. outputItr set_symmetric_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);  
  9. template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>  
  10. outputItr set_symmetric_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);  

示例代码:
  1. #include   
  2. #include   
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9.   
  10. #include   
  11.   
  12. using namespace std;  
  13.   
  14. int main() {  
  15.     int setA[5] = {2,4,5,7,8};  
  16.     int setB[7] = {3,4,5,6,7,8,10};  
  17.     int setC[5] = {1,5,6,8,15};  
  18.   
  19.     int AdifferenceC[5];  
  20.     int BsymDiffC[10];  
  21.     int * lastElement;  
  22.     ostream_iterator<int> screen(cout," ");  
  23.     cout << "setA:" << endl;  
  24.     copy(setA,setA+5,screen);  
  25.     cout << endl;  
  26.     cout << "setB:" << endl;  
  27.     copy(setB,setB+7,screen);  
  28.     cout << endl;  
  29.     cout << "setC:" << endl;  
  30.     copy(setC,setC+5,screen);  
  31.     cout << endl;  
  32.   
  33.     // set_difference  
  34.     lastElement = set_difference(setA,setA+5,setC,setC+5,AdifferenceC);  
  35.     cout << "AdifferenceC:" << endl;  
  36.     copy(AdifferenceC,lastElement,screen);  
  37.     cout << endl;  
  38.   
  39.     // set_symmetric_differenc 对称差  
  40.     lastElement = set_symmetric_difference(setB,setB+7,setC,setC+5,BsymDiffC);  
  41.     cout << "BsymDiffC:" << endl;  
  42.     copy(BsymDiffC,lastElement,screen);  
  43.     cout << endl;  
  44.       
  45.     return 0;  
  46. }  
运行结果:

setA:
2 4 5 7 8
setB:
3 4 5 6 7 8 10
setC:
1 5 6 8 15
AdifferenceC:
2 4 7
BsymDiffC:
1 3 4 7 10 15

你可能感兴趣的:(STL,模板,Boost)