zoukankan      html  css  js  c++  java
  • 删除容器中重复字符串并按长度排序…

    #include < iostream> >
    #include < algorithm> >
    #include < string> >
    #include < vector> >

    using namespace std;

    string make_plural(size_t ctr, const string &word,
        const string &ending)
    {
        return (ctr > 1) ? word + ending : word;
    }

    bool IsShorter(const string &str1, const string &str2)
    {
        return str1.size() < str2.size();
    }

    void ElimDups(vector &words)
    {
        sort(words.begin(), words.end());

        auto end_unique = unique(words.begin(), words.end());
        words.erase(end_unique, words.end());
    }

    void BiggiesWithFind_if(vector &words,
        vector::size_type sz)
    {
        //按字典排序, 删除重复单词
        ElimDups(words);

        //按长度排序, 长度相同的维持字典序
        stable_sort(words.begin(), words.end(),
            [](const string &str1, const string &str2)
        {return str1.size() < str2.size(); });

        //获取一个迭代器, 指向第一个满足size() > sz的元素
        auto wc = find_if(words.begin(), words.end(),
            [=](const string &s)//可以使用隐式捕获, 编译器会自己推断捕获内容
                                //捕获引用使用'&' , 捕获值使用'='
        {return s.size() >= sz;    });

        //计算满足条件元素的数目
        auto count = words.end() - wc;
        cout << count << " " << make_plural(count, "word", "s")
            << "  of length  " << sz << "  or longer" << endl;

        //打印每个长度大于等于要求的值的单词, 每个单词后面接一个空格
        for_each(wc, words.end(),
            [](const string &s) {cout << s << " "; });
        cout << endl;
    }

    void BiggiesWithPartition(vector &words,
        vector::size_type sz)
    {
        ElimDups(words);
        auto wc = partition(words.begin(), words.end(),
            [sz](const string &str) {return str.size() < sz; });
        //计算满足条件元素的数目
        auto count = words.end() - wc;
        cout << count << " " << make_plural(count, "word", "s")
            << "  of length  " << sz << "  or longer" << endl;

        //打印每个长度大于等于要求的值的单词, 每个单词后面接一个空格
        for_each(wc, words.end(),
            [](const string &s) {cout << s << " "; });
        cout << endl;
    }

    int main(int argc, char **argv)
    {
        vectorstr_vec{ "the", "red", "fox", "jump", "over", "the", "slow", "red", "turtle" };
        BiggiesWithFind_if(str_vec, 4);
        cout << "-------------------" << endl;
        BiggiesWithPartition(str_vec, 4);
        return 0;
    }

  • 相关阅读:
    Redis 启动与授权
    ssh客户端乱码
    centos修改oracle字符集
    netty 基础知识
    推送技术
    oracle 12C安装问题
    Labview学习之路(十三)常用快捷键积累
    Labview学习之路(十二)如何让图片做前面板背景
    UCOSIII(一)常用函数积累
    Keil出现错误
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/4098745.html
Copyright © 2011-2022 走看看