STL集合运算1

<< 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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值