C++ lambda algorithm

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

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

void elimDups(std::vector<std::string> &words)
{
        std::sort(words.begin(), words.end());
        auto end_unique = std::unique(words.begin(), words.end());
        words.erase(end_unique, words.end());
}

void biggies(std::vector<std::string> &words, std::vector<std::string>::size_type sz) 
{
        elimDups(words);
        std::stable_sort(words.begin(), words.end(), 
                [](const std::string &left, const std::string &right)
                { return left.size() < right.size(); }); 
        auto wc = std::find_if(words.begin(), words.end(), 
                [sz](const std::string &s){ return s.size() >= sz; }); 
        auto count = words.end() - wc; 
        std::cout << count << make_plural(count, "word", "s")
                  << " of length " << sz << " or longer" << std::endl;
        std::for_each(wc, words.end(), 
                [](const std::string &s) { std::cout << s << " "; }); 
        std::cout << std::endl;
}
int main()
{
        std::vector<std::string> words;
        std::string str;

        while (std::cin >> str) {
                words.push_back(str);
        }
        biggies(words, 5);
        return 0;
}

[1] C++ Primer 5th Section 10.3.2 Lambda Expressions (p. 391)
g++ xx.cpp -std=c++11
gcc 4.9.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值