set相关操作源码

来源:互联网 发布:经济数据分析 编辑:程序博客网 时间:2024/05/21 17:49
/*set相关算法*///set_uniontemplate <class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_union(InputIterator1 first1,InputIterator1 last1, InputIterator2 first2,InputIterator2 last2, OutputIterator result){// 当两个区间都尚未到达尾端时,执行以下操作...while (first1 != last1 && first2 != last2){// 在两区间内分别移动迭代器.首先将元素值较小者(假设为A区)记录于目标区,// 然后移动A区迭代器使之前进;同时间之另一个迭代器不动.然后进行新一次// 的比大小、记录小值、迭代器移动...直到两区中有一区到达尾端.如果元素相等,// 取S1者记录于目标区,并同时移动两个迭代器if (*first1  < *first2){*result = *first1;++first1;}else if (*first2 < *first1){*result = *first2;++first2;}else// *first2 == *first1{*result = *first1;++fist1;++fist2;}++result;}// 只要两区之中有一区到达尾端,就结束上述的while循环// 以下将尚未到达尾端的区间的所有剩余元素拷贝到目的端// 此刻的[first1, last1]和[first2, last2]之中至少有一个是空白区间return copy(first2, last2, copy(first1, last1, result));}//set_intersectiontemplate <class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result){// 当两个区间都尚未到达尾端时,执行以下操作...while (fist1 != last1 && first2 != last2){// 在两区间内分别移动迭代器,直到遇有元素值相同,暂停,将该值记录于目标区,// 在继续移动迭代器... 直到两区之中有一区到达尾端if (*first1 < *first2){++first1;}else if (*first2 < *first1){++first2;}else// *first2 == *first1{*result = *first1;++first1;++first2;++result;}}return result;}//set_differencetemplate <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;++first1;++result;}else if (*first2 < *first1){++first2;}else // *first2 == *first1{++first1;++first2;}}return copy(first1, last1, result);}//set_symmetric_differencetemplate <class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_symmetric_difference(InputIterator1 first1,InputIterator1 last1,InputIterator2 first2,InputIterator2 last2,OutputIterator result){// 当两个区间都尚未到达尾端时, 执行以下操作...while (first1 != last1 && first2 != last2){// 在两区间内分别移动迭代器.当两区间内的元素相等, 就让两区间同时前进;// 当两区间内的元素不等, 就记录较小者值于目标区, 并令较小值所在区间前进if (*first1 < *first2){*result = *first1;++first1;++result;}else if (*first2 < *first1){*result = *first2;++first2;++result;}else // *first2 == *first1 {++first1;++first2;}}return copy(first2, last2, copy(first1, last1, result));}

原创粉丝点击