<< The Annotated STL Sources (using SGI STL >>
6.5 set
6.5.1 set_union
集合的并运算(S1 U S2)。注意s1和s2內的元素不一定为惟一的,若X在s1出现n次,在x2出现m次,则最终输出max(n,m)个X.该算法是稳定的。
template<class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator
set_union(InputIterator1 first1, InputIterator1 last1,
InputIterator1 first2, InputIterator2 last2,
OutputIterator result){
while(first1 != last1 && first2 != last2){
if(*first1 < *first2){
*result = *first1 ;
++first1;
}
else if(*first1 > * first2){
*result = *first2;
++first2;
}
else { // *first1 == *first2
*result = *first1;
++first1;
++first2;
}
++result;
}
return copy(first2, last2,copy(first1, last1, result));
}
6.5.2 set_intersection
求集合的交集.若X在s1中出现n次,在s2中出现m次,则最终输出min(n,m)次。
该算法也是稳定的。
template<class InputItetator1, class InputIterator2,
class OutputIterator>
OutputIterator
set_intersection(
InputIterator1 first1, InputIterator1,last1, InputIterator2 first2, InputIterator2 last2,
OutputIterator result){
while(first1 != last1 && first2 != last2){
if(*first1 < *last1)
++first1;
else if(*first1 > *first2)
++first2;
else { // *first1 == *first2
*result = *first1;
++first1;
++first2;
++result;
} // end of else
}//end of while
}// end of function