C++ set_union,set_intersection,set_difference

来源:互联网 发布:企业建站cms 编辑:程序博客网 时间:2024/05/29 16:00

#include <iostream>#include <algorithm>#include <array>#include <vector>#include <functional>using namespace std;//两集合的合集template <class InputIterator1, class InputIterator2, class OutputIterator>  OutputIterator _set_union (InputIterator1 first1, InputIterator1 last1,                            InputIterator2 first2, InputIterator2 last2,                            OutputIterator result){while (true){if (first1==last1) return copy(first2,last2,result);if (first2==last2) return copy(first1,last1,result);if (*first1<*first2) { *result = *first1; ++first1; }else if (*first2<*first1) { *result = *first2; ++first2; }else { *result = *first1; ++first1; ++first2; }++result;}}//两集合的交集template <class InputIterator1, class InputIterator2, class OutputIterator>  OutputIterator _set_intersection (InputIterator1 first1, InputIterator1 last1,                                   InputIterator2 first2, InputIterator2 last2,                                   OutputIterator result){while (first1!=last1 && first2!=last2){if (*first1<*first2) ++first1;else if (*first2<*first1) ++first2;else {*result = *first1;++result; ++first1; ++first2;}}return result;}//A-B的差集template <class InputIterator1, class InputIterator2, class OutputIterator>  OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,                                 InputIterator2 first2, InputIterator2 last2,                                 OutputIterator result){while (first1!=last1 && first2!=last2){if (*first1<*first2) { *result = *first1; ++result; ++first1; }else if (*first2<*first1) ++first2;else { ++first1; ++first2; }}return copy(first1,last1,result);}int main(){array<int,8> t1 = {3,5,7,11,13,17,19,23};array<int,8> t2 = {3,5,7,11,13,17,19,23};array<int,16> t3;set_union(t1.begin(),t1.end(),t2.begin(),t2.end(),t3.begin());for_each(t3.begin(),t3.end(),[](int i){cout<<i<<endl;});return 0;}



0 0
原创粉丝点击