includes,set_intersection,set_union,set_difference,set_symmetric_difference都是集合論中的操作。這些算法都假定指定區(qū)間類的元素已經有序。
includes:A∈B
set_intersection:A∩B
set_union:A∪B
set_difference:A-B
set_symmetric_difference:(A-B)∪(B-A)
1,includes
聲明:
#include?<algorithm>?? template?<class?inputItr1,?class?inputItr2>?? bool?includes(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,?inputItr2?last2);?? template?<class?inputItr1,?class?inputItr2,?class?binaryPredicate>?? bool?includes(inputItr1?first1,?inputItr1?last1,?inputItr2,binaryPredicate?op);??
示例代碼:
#include?<iostream>?? #include?<list>?? ?? #include?<string>?? #include?<numeric>?? #include?<iterator>?? #include?<vector>?? #include?<functional>?? ?? #include?<algorithm>?? ?? using?namespace?std;?? ?? int?main()?{?? ????char?setA[5]?=?{'A','B','C','D','E'};?? ????char?setB[10]?=?{'A','B','C','D','E','F','I','J','K','L'};?? ????char?setC[5]?=?{'A','E','I','O','U'};?? ?? ????ostream_iterator<char>?screen(cout,?"?");?? ????cout?<<?"setA:"?<<?endl;?? ????copy(setA,setA+5,screen);?? ????cout?<<?endl;?? ????cout?<<?"setB:"?<<?endl;?? ????copy(setB,setB+10,screen);?? ????cout?<<?endl;?? ????cout?<<?"setC:"?<<?endl;?? ????copy(setC,setC+5,screen);?? ????cout?<<?endl;?? ?? ????if?(includes(setB,setB+10,setA,setA+5))?? ????{?? ????????cout?<<?"setA?is?a?subset?of?setB"?<<?endl;?? ????}?else?{?? ????????cout?<<?"setA?is?not?a?subset?of?setB"?<<?endl;?? ????}?? ?? ????if?(includes(setB,setB+10,setC,setC+5))?? ????{?? ????????cout?<<?"setC?is?a?subset?of?setB"?<<?endl;?? ????}?else?{?? ????????cout?<<?"setC?is?not?a?subset?of?setB"?<<?endl;?? ????}?? ?? ????return?0;?? }??
運行結果:
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
聲明:
#include?<algorithm>?? template?<class?inputItr1,?class?inputItr2,class?outputItr>?? outputItr?set_intersection(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst);?? template?<class?inputItr1,?class?inputItr2,class?outputItr,class?binaryPredicate>?? outputItr?set_intersection(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst,binaryPredicate?op);?? ?? template?<class?inputItr1,?class?inputItr2,class?outputItr>?? outputItr?set_union(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst);?? template?<class?inputItr1,?class?inputItr2,class?outputItr,class?binaryPredicate>?? outputItr?set_union(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst,binaryPredicate?op);??
示例代碼:
#include?<iostream>?? #include?<list>?? ?? #include?<string>?? #include?<numeric>?? #include?<iterator>?? #include?<vector>?? #include?<functional>?? ?? #include?<algorithm>?? ?? using?namespace?std;?? ?? int?main()?{?? ????int?setA[5]?=?{2,4,5,7,8};?? ????int?setB[7]?=?{1,2,3,4,5,6,7};?? ????int?setC[5]?=?{2,5,8,8,15};?? ????int?setD[6]?=?{1,4,4,6,7,12};?? ????int?AunionB[10];?? ????int?AunionC[10];?? ????int?BunionD[15];?? ????int?AintersectB[10];?? ????int?AintersectC[10];?? ?? ????int?*?lastElement;?? ????ostream_iterator<int>?screen(cout,"?");?? ????cout?<<?"setA:"?<<?endl;?? ????copy(setA,setA+5,screen);?? ????cout?<<?endl;?? ????cout?<<?"setB:"?<<?endl;?? ????copy(setB,setB+7,screen);?? ????cout?<<?endl;?? ????cout?<<?"setC:"?<<?endl;?? ????copy(setC,setC+5,screen);?? ????cout?<<?endl;?? ????cout?<<?"setD:"?<<?endl;?? ????copy(setD,setD+6,screen);?? ????cout?<<?endl;?? ?? ?????? ????lastElement?=?set_union(setA,setA+5,setB,setB+7,AunionB);?? ????cout?<<?"AunionB:"?<<?endl;?? ????copy(AunionB,lastElement,screen);?? ????cout?<<?endl;?? ?? ????lastElement?=?set_union(setA,setA+5,setC,setC+5,AunionC);?? ????cout?<<?"AunionC:"?<<?endl;?? ????copy(AunionC,lastElement,screen);?? ????cout?<<?endl;?? ?? ????lastElement?=?set_union(setB,setB+7,setD,setD+6,BunionD);?? ????cout?<<?"BunionD:"?<<?endl;?? ????copy(BunionD,lastElement,screen);?? ????cout?<<?endl;?? ?? ?????? ????lastElement?=?set_intersection(setA,?setA+5,setB,setB+7,AintersectB);?? ????cout?<<?"AintersectB:"?<<?endl;?? ????copy(AintersectB,lastElement,screen);?? ????cout?<<?endl;?? ?? ????lastElement?=?set_intersection(setA,?setA+5,setC,setC+5,AintersectC);?? ????cout?<<?"AintersectC:"?<<?endl;?? ????copy(AintersectC,lastElement,screen);?? ????cout?<<?endl;?? ????return?0;?? }??
運行結果:
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
聲明:
#include?<algorithm>?? template?<class?inputItr1,?class?inputItr2,class?outputItr>?? outputItr?set_difference(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst);?? template?<class?inputItr1,?class?inputItr2,class?outputItr,class?binaryPredicate>?? outputItr?set_difference(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst,binaryPredicate?op);?? ?? template?<class?inputItr1,?class?inputItr2,class?outputItr>?? outputItr?set_symmetric_difference(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst);?? template?<class?inputItr1,?class?inputItr2,class?outputItr,class?binaryPredicate>?? outputItr?set_symmetric_difference(inputItr1?first1,?inputItr1?last1,?inputItr2?first2,inputItr2?last2,outputItr?destFirst,binaryPredicate?op);?? 示例代碼:
#include?<iostream>?? #include?<list>?? ?? #include?<string>?? #include?<numeric>?? #include?<iterator>?? #include?<vector>?? #include?<functional>?? ?? #include?<algorithm>?? ?? using?namespace?std;?? ?? int?main()?{?? ????int?setA[5]?=?{2,4,5,7,8};?? ????int?setB[7]?=?{3,4,5,6,7,8,10};?? ????int?setC[5]?=?{1,5,6,8,15};?? ?? ????int?AdifferenceC[5];?? ????int?BsymDiffC[10];?? ????int?*?lastElement;?? ????ostream_iterator<int>?screen(cout,"?");?? ????cout?<<?"setA:"?<<?endl;?? ????copy(setA,setA+5,screen);?? ????cout?<<?endl;?? ????cout?<<?"setB:"?<<?endl;?? ????copy(setB,setB+7,screen);?? ????cout?<<?endl;?? ????cout?<<?"setC:"?<<?endl;?? ????copy(setC,setC+5,screen);?? ????cout?<<?endl;?? ?? ?????? ????lastElement?=?set_difference(setA,setA+5,setC,setC+5,AdifferenceC);?? ????cout?<<?"AdifferenceC:"?<<?endl;?? ????copy(AdifferenceC,lastElement,screen);?? ????cout?<<?endl;?? ?? ?????? ????lastElement?=?set_symmetric_difference(setB,setB+7,setC,setC+5,BsymDiffC);?? ????cout?<<?"BsymDiffC:"?<<?endl;?? ????copy(BsymDiffC,lastElement,screen);?? ????cout?<<?endl;?? ?????? ????return?0;?? }??
運行結果:
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 之includes,set_intersection,set_union,set_difference,set_symmetric_difference的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。