• 删除容器中重复字符串并按长度排序…


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

  • 相关阅读:
    CDQ分治·学习笔记
    高斯消元板子
    [HEOI2012]朋友圈
    [CTSC2008]祭祀
    Medium | LeetCode 140. 单词拆分 II | 回溯(递归)
    Hard | LeetCode 212. 单词搜索 II | 回溯 + 前缀树
    Medium | LeetCode 131. 分割回文串 | 回溯 + 动态规划预处理
    Hard | LeetCode 329. 矩阵中的最长递增路径 | 矩阵+DFS
    Hard | LeetCode 76. 最小覆盖子串 | 滑动窗口
    Medium | LeetCode 130. 被围绕的区域 | 矩阵 + DFS
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/4098745.html
Copyright © 2020-2023  润新知