• 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;
    }

    运行结果:

    4
    dfdaaaa 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 
    4
    aaaaa aaaaaaa dfaaaaa dfdaaaa 

    说明stable_partiton不改变字典顺序,是稳定的操作。

  • 相关阅读:
    react项目中如何解决同时需要多个请求问题
    jq+ajax+bootstrap改写一个动态分页的表格
    Window7+vs2008+QT环境搭建
    mssql charindex
    解决NTLDR is missing,系统无法启动的方法
    基于三汇语音卡的呼叫中心开发(一)
    Wince 或Windows平台 C#调用Bitmap对象后资源应该如何释放
    Anki:插件开发
    java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.ValueStack
    struts2中action之间的一种跳转
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3917708.html
Copyright © 2020-2023  润新知