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

  • 相关阅读:
    java读写文本文件
    django学习<二>:连接数据库
    【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
    【MongoDB】C#中的Mongo数据类型转换
    【MongoDB】 基于C#官方驱动2.2版的封装类
    【Python】 属性的 get 与 set 方法
    【基础知识】UML基础
    【C#】 知乎用户网络爬虫
    【C#】MVC项目中搭建WebSocket服务器
    【MongoDB】 Windows 安装
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3917708.html
Copyright © 2011-2022 走看看