c++ algorithm之分分(partition)合合(merge)
在c++中,对于自带的容器有一套十分好用的算法,今天介绍的是分离
和合并
算法模板
合并(merge)
参数介绍
合并有5个参数,第一个第二个参数为第一个容器的头和尾,第三个第四个参数为第二个容器的头和尾,最后一个参数是存储到容器的位置
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> v1 = {1,3,4,2,0};
vector<int> v2 = {4,1,0,0,9};
vector<int> v3(10);
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
for_each(v3.begin(),v3.end(),[](int i){
cout<<i<<" ";
});
return 0;
}
分离(partition)
参数介绍
分离有三个参数,前两个为容器的头和尾,即所筛选的数据范围,第三个参数为筛选函数,返回类型为bool。
merge返回一个迭代器it,从容器的第一个迭代器到it是满足函数的部分,从it到容器的最后一个迭代器是不满足函数的部分
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool isodd(int x)
{
return x%2==1;
}
int main()
{
vector<int> v1 = {1,3,4,2,0,4,1,0,0,9};
vector<int>::iterator it;
it = partition(v1.begin(),v1.end(),isodd);
for(vector<int>::iterator i = v1.begin();i!=it;i++)
cout<<*i<<" ";
cout<<endl;
for(vector<int>::iterator i = it;i!=v1.end();i++)
cout<<*i<<" ";
return 0;
}