zoukankan      html  css  js  c++  java
  • 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不改变字典顺序,是稳定的操作。

  • 相关阅读:
    nose测试中修改nose_html_reporting插件,使生成的html报告加入显示截图功能
    python selenium中等待元素出现及等待元素消失操作
    在python pydev中使用todo标注任务
    云存储命令行工具---libs3
    关于qt creator各种假死的问题
    小端存储转大端存储 & 大端存储转小端存储
    C++判断计算式是大端存储模式,还是小端存储模式
    请教网友:#pragma pack(push) #pragma pack(pop)无效
    sizeof 计算 struct 占字节数的方法总结
    const 变量在多个文件共享,如何验证两种不同的方式下,编译器是否会在多个文件下建立多个副本
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3917708.html
Copyright © 2011-2022 走看看