首页 > 代码库 > find_if函数与partition函数的转换
find_if函数与partition函数的转换
编写程序,求大于等于一个给定长度的单词有多少。我们还会修改输出,使程序只打印大于等于给定长度的单词。
使用find_if实现的代码如下:
#include<algorithm>#include<vector>#include<iostream>#include<string>using namespace std;void biggies(vector<string> &words,vector<string>::size_type sz){ sort(words.begin(),words.end()); auto end_unique=unique(words.begin(),words.end()); words.erase(end_unique,words.end()); stable_sort(words.begin(),words.end(),[](const string &s1,const string s2) {return s1.size()<s2.size();}); auto wc=find_if(words.begin(),words.end(),[sz](const string &s) { return s.size()>=sz;}); auto count=words.end()-wc; cout<<count<<endl; for_each(wc,words.end(),[](const string &s) {cout<<s<<" ";}); cout<<endl;}int main(){ vector<string> words={"aaaaa","aaaaaaa","dfdaaaa","fdaa","aaa","dfaaaaa"}; biggies(words,5); return 0;}
使用partition代码的程序:
#include<algorithm>#include<vector>#include<iostream>#include<string>using namespace std;void biggies(vector<string> &words,vector<string>::size_type sz){ sort(words.begin(),words.end()); auto end_unique=unique(words.begin(),words.end()); words.erase(end_unique,words.end()); stable_sort(words.begin(),words.end(),[](const string &s1,const string s2) {return s1.size()<s2.size();}); auto wc=partition(words.begin(),words.end(),[sz](const string &s) { return s.size()>=sz;}); auto count=wc-words.begin(); cout<<count<<endl; for_each(words.begin(),wc,[](const string &s) {cout<<s<<" ";}); cout<<endl;}int main(){ vector<string> words={"aaaaa","aaaaaaa","dfdaaaa","fdaa","aaa","dfaaaaa"}; biggies(words,5); return 0;}
运行结果:
4dfdaaaa dfaaaaa aaaaa aaaaaaa
当使用stable_partition后程序:
#include<algorithm>#include<vector>#include<iostream>#include<string>using namespace std;void biggies(vector<string> &words,vector<string>::size_type sz){ sort(words.begin(),words.end()); auto end_unique=unique(words.begin(),words.end()); words.erase(end_unique,words.end()); stable_sort(words.begin(),words.end(),[](const string &s1,const string s2) {return s1.size()<s2.size();}); for_each(words.begin(),words.end(),[](const string &s) {cout<<s<<" ";}); cout<<endl; auto wc=stable_partition(words.begin(),words.end(),[sz](const string &s) { return s.size()>=sz;}); auto count=wc-words.begin(); cout<<count<<endl; for_each(words.begin(),wc,[](const string &s) {cout<<s<<" ";}); cout<<endl;}int main(){ vector<string> words={"aaaaa","aaaaaaa","dfdaaaa","fdaa","aaa","dfaaaaa"}; biggies(words,5); return 0;}
运行结果:
aaa fdaa aaaaa aaaaaaa dfaaaaa dfdaaaa 4aaaaa aaaaaaa dfaaaaa dfdaaaa
说明stable_partiton不改变字典顺序,是稳定的操作。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。