lambda 表达式 介绍

问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素。标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接受一个参数,这个参数是vector<string>里的元素。这时问题就来了,长度4无法作为参数传递,

肿么办???

解决办法:使用lambda。

lambda简单介绍:多了一个捕获列表的无名内联函数。

[capture list] (parameter list) -> return type { function body }

捕获列表,参数列表(可省略),返回值类型(可省略),函数体。

具体做法:把问题中的长度4作为捕获列表,把vector<string>里的元素作为参数列表,传递个lambda表达式,就解决了上述问题,

完美!!!

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
#include <list>
#include <deque>
#include <numeric>
#include <forward_list> using namespace std; //删除重复的元素
void delDups(vector<string> &svec){
sort(svec.begin(),svec.end());
auto end_u = unique(svec.begin(),svec.end());
svec.erase(end_u, svec.end());
}
//自定义的排序规则
bool shorter(const string s1, const string s2){
return s1.size() < s2.size();
}
//用lambda作为参数
void bigger(vector<string> &words,
vector<string>::size_type sz){
delDups(words);
//用lambda作为第三个参数
stable_sort(words.begin(), words.end(),
[](const string &s1, const string &s2){
return s1.size() < s2.size();
});
//把长度参数sz作为捕获列表,传递给lambda表达式
auto idx = find_if(words.begin(),words.end(),
[sz](const string &s){
return s.size() >= sz;
});
auto cnt = words.end() - idx;
cout << cnt << " word's length >= " << sz << endl;
for_each(idx, words.end(),[](const string &s){
cout << s << " ";
});
cout << endl;
}
int main(){
//test1 自定义排序算法
/*
vector<string> svec{"the","quick","red","fox","jumps",
"over", "the","slow","red","turtle"};
delDups(svec);
//先按长度排序,长度相同的,再用字典顺序排序
stable_sort(svec.begin(),svec.end(),shorter);
for(const auto &s : svec){
cout << s << " ";
}
cout << endl;
*/ //test2 用lambda作为参数
vector<string> svec{"the","quick","red","fox","jumps",
"over", "the","slow","red","turtle"};
bigger(svec, 4); }

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ lambda 表达式 介绍的更多相关文章

  1. Linq学习系列-----1.1 Lambda表达式介绍

     1.1  Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...

  2. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  3. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  4. Lambda表达式介绍

    Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符----------  =>,该运算符读为" ...

  5. Lambda表达式介绍(转)

    刚开始学lambda,lambda与linq的联合使用. Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符- ...

  6. Java 8 Lambda表达式介绍

    Lambda是什么? Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码.可以写出简洁.灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到提升. 可以这么说l ...

  7. JAVA 8 Lambda表达式-Lambda Expressions

    Lambda表达式介绍 Lambda表达式是在java规范提案JSR 335中定义的,Java 8 中引入了Lambda表达式,并被认为是Java 8最大的新特性,Lambda表达式促进了函数式编程, ...

  8. java8新增特性(一)---Lambda表达式

    Lambda表达式也成为闭包,是java语言层次上的改变,Lambda同意把函数作为一个方法的參数(函数作为參数传递进方法中),或者把代码看成数据.函数式程序猿对这一概念非常熟悉. 在JVM平台上有非 ...

  9. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

随机推荐

  1. 聊聊Flexbox布局中的flex的演算法

    到目前为止,Flexbox布局应该是目前最流行的布局方式之一了.而Flexbox布局的最大特性就是让Flex项目可伸缩,也就是让Flex项目的宽度和高度可以自动填充Flex容器剩余的空间或者缩小Fle ...

  2. mysql累积聚合

    累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两个解决方案,分别是为使用子查询和使用连接.子查询的方法通常比较直观,可读性强. ...

  3. spring-boot-2.0.3之quartz集成,数据源问题,源码探究

    前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...

  4. 为Spring Cloud Config插上管理的翅膀

    最近一致在更新Spring Cloud Config的相关内容,主要也是为这篇埋个伏笔,相信不少调研过Spring Cloud Config的用户都会吐槽它的管理能力太弱.因此,就有了下面为讲推荐的这 ...

  5. CSS定位概述

    CSS中有三种基本的定位机制:普通流,浮动和绝对定位.   1.相对定位:relative 如果对一个元素进行相对定位,它将出现在它所在的位置上,然后可以通过设置垂直或者水平位置,让这个元素“相对于” ...

  6. Python进阶笔记

    列表生成式 函数的参数类型 lambda函数 map, reduce, filter, sorted函数 eval, exec, join, zip函数 itertools中的函数 copy与deep ...

  7. c# partial 关键字的使用

    C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现.(2) ...

  8. Message": "请求的资源不支持 http 方法“GET”

    今天用postman测试后端api,总是报错,下面是问题解决方案. 一.测试方法 public ApiResult Get(int id){ApiResult result = new ApiResu ...

  9. mysql外键使用

    一.外键 .外键:链接两张表的字段,通过主表的主键和从表的外键来描述主外键关系,呈现的是一对多的关系.例如:商品类别(一)对商品(多),主表:商品类别表,从表:商品表. .外键的特点:从表外键的值是对 ...

  10. php截取中文字符串无乱码的方法

    利用php内置方法mb_substr截取中文不乱码,使用起来非常简单 <?php $str = '我喜欢laravel or yii2'; echo mb_substr($str, 0, 1, ...