STL算法(Algorithms):合并(Merge)

1、merge:将两个序列合并成一个新的序列,并对新的序列排序
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result );
template <class InputIterator1, class InputIterator2,class OutputIterator, class Compare>
OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
示例:

// mergealgorithmexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 );
vector
< int > ::iteratorit;

sort(first,first
+ 5 );
sort(second,second
+ 5 );
merge(first,first
+ 5 ,second,second + 5 ,v.begin());

cout
<< " Theresultingvectorcontains: " ;
for (it = v.begin();it != v.end(); ++ it)
cout
<< " " << * it;

cout
<< endl;

return 0 ;
}



2、inplace_merge:将两个序列合并成一个新的序列,并对新的序列进行归并排序(这两个序列必须要进过排序)
原型:
template <class BidirectionalIterator>
void inplace_merge ( BidirectionalIterator first, BidirectionalIterator middle,
BidirectionalIterator last );

template <class BidirectionalIterator, class Compare>
void inplace_merge ( BidirectionalIterator first, BidirectionalIterator middle,
BidirectionalIterator last, Compare comp );
示例:

// inplace_mergeexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 );
vector
< int > ::iteratorit;

sort(first,first
+ 5 );
sort(second,second
+ 5 );

copy(first,first
+ 5 ,v.begin());
copy(second,second
+ 5 ,v.begin() + 5 );

inplace_merge(v.begin(),v.begin()
+ 5 ,v.end());

cout
<< " Theresultingvectorcontains: " ;
for (it = v.begin();it != v.end(); ++ it)
cout
<< " " << * it;

cout
<< endl;

return 0 ;
}


3、includes:测试是一个序列是否在另一个序列中
原型:
template <class InputIterator1, class InputIterator2>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2 );
template <class InputIterator1, class InputIterator2, class Compare>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2, Compare comp );
示例:

// includesalgorithmexample
#include < iostream >
#include
< algorithm >
using namespace std;

bool myfunction( int i, int j){ return i < j;}

int main(){
int container[] = { 5 , 10 , 15 , 20 , 25 , 30 , 35 , 40 , 45 , 50 };
int continent[] = { 40 , 30 , 20 , 10 };

sort(container,container
+ 10 );
sort(continent,continent
+ 4 );

// usingdefaultcomparison:
if (includes(container,container + 10 ,continent,continent + 4 ))
cout
<< " containerincludescontinent! " << endl;

// usingmyfunctionascomp:
if (includes(container,container + 10 ,continent,continent + 4 ,myfunction))
cout
<< " containerincludescontinent! " << endl;

return 0 ;
}


4、set_union:和merge类似,不过新序列中没有重复的元素
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result );
template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
示例:

// set_unionexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 ); // 0000000000
vector < int > ::iteratorit;

sort(first,first
+ 5 ); // 510152025
sort(second,second + 5 ); // 1020304050

it
= set_union(first,first + 5 ,second,second + 5 ,v.begin());
// 51015202530405000

cout
<< " unionhas " << int (it - v.begin()) << " elements.\n " ;

return 0 ;
}


5、set_intersection:两个序列的交集
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result );
template <class InputIterator1, class InputIterator2,class OutputIterator, class Compare>
OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
示例:

// set_intersectionexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 ); // 0000000000
vector < int > ::iteratorit;

sort(first,first
+ 5 ); // 510152025
sort(second,second + 5 ); // 1020304050

it
= set_intersection(first,first + 5 ,second,second + 5 ,v.begin());
// 102000000000

cout
<< " intersectionhas " << int (it - v.begin()) << " elements.\n " ;

return 0 ;
}


6、set_difference:序列(first1,last1)不在序列(first2,last2)中的元素
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,outputIterator result );
template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
OutputIterator set_intersection ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
示例:

// set_differenceexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 ); // 0000000000
vector < int > ::iteratorit;

sort(first,first
+ 5 ); // 510152025
sort(second,second + 5 ); // 1020304050

it
= set_difference(first,first + 5 ,second,second + 5 ,v.begin());
// 515250000000

cout
<< " differencehas " << int (it - v.begin()) << " elements.\n " ;

return 0 ;
}


7、set_symmetric_difference:所有不在序列(first1,last1)和序列(first2,last2)中的元素
原型:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_symmetric_difference ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result );
template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare>
OutputIterator set_symmetric_difference ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );
示例:

// set_symmetric_differenceexample
#include < iostream >
#include
< algorithm >
#include
< vector >
using namespace std;

int main(){
int first[] = { 5 , 10 , 15 , 20 , 25 };
int second[] = { 50 , 40 , 30 , 20 , 10 };
vector
< int > v( 10 ); // 0000000000
vector < int > ::iteratorit;

sort(first,first
+ 5 ); // 510152025
sort(second,second + 5 ); // 1020304050

it
= set_symmetric_difference(first,first + 5 ,second,second + 5 ,v.begin());
// 515253040500000

cout
<< " symmetricdifferencehas " << int (it - v.begin()) << " elements.\n " ;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值