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不改变字典顺序,是稳定的操作。

  • 相关阅读:
    Elasticsearch
    区块链 blockchain
    IM协议
    MQ,互联网架构解耦神器
    服务中的 API 网关(API Gateway)
    OSI七层与TCP/IP五层网络架构详解
    JQ input标签限制输入数字或字母
    c:forEach用法
    jquery在线引用
    JSONObject使用方法
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3917708.html
Copyright © 2011-2022 走看看