STL之partition学习

时间:2023-12-31 22:56:02

顺便存一下numeric函数的使用方法吧,感觉用处不大。

https://blog.csdn.net/baishuo8/article/details/84073565

partition函数,将元素划分为两个集合,顺序被打乱,只是分类。

包括三个参数,第一个参数代表开始位置,第二个参数代表截止位置,第三个参数代表根据什么分类。

is_partitioned 函数,判断元素是否按照给定的函数分组的,{F F F T T },{T T T T F },{TTTFF},{TTTT},{FFF}都是正确的分组。{FFTFF}是错误的分组

stable_partition函数,和partition函数差不多,分组之后只是顺序并没有被打乱。

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
bool odd(int t){
return t%==;
}
int main()
{
for(int i=; i<=; i++)
{
q.push_back(i);
}
auto div=partition(q.begin(),q.end(),odd);
// for(auto i=q.begin();i!=div;i++){
// cout<<" "<<*i;
// }
// cout<<endl;
for_each(q.begin(),div,[](auto i){cout<<" "<<i;});
cout<<endl;
for_each(div,q.end(),[](auto i){cout<<" "<<i;});
cout<<endl;
return ;
}

is_partitioned 函数

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
bool odd(int t){
return t%==;
}
int main()
{
for(int i=; i<=; i++)
{
q.push_back(i);
} cout<<is_partitioned(q.begin(),q.end(),odd)<<endl;// 0
auto div=partition(q.begin(),q.end(),odd);
cout<<is_partitioned(q.begin(),q.end(),odd)<<endl;// 1
return ;
}

stable_partitioned 函数

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
bool odd(int t){
return t%==;
}
int main()
{
for(int i=; i<=; i++)
{
q.push_back(i);
}
auto div=stable_partition(q.begin(),q.end(),odd);
for_each(q.begin(),div,[](auto i ){cout<<i<<" ";});
cout<<endl;
for_each(div,q.end(),[](auto i){cout<<i<<" ";});
return ;
}