1:Lambda函数语法

C++ 语法的基本格式为:

[capture](parameters) -> return_type { /* ... */ }

(1) [capture] :[]内为外部变量的传递方式,值、引用等,如下

[]        //表示的是在lambda定义之前的域,对外部参数的调用;
[=]       //表示外部参数直接传值
[&]       //表示外部参数传引用,可修改值。当默认捕获符是 & 时,后继的简单捕获符必须不以 & 开始。而当默认捕获符是 = 时,后继的简单捕获符必须以 & 开始。
[x, &y]   //x is captured by value, y is captured by reference
[&, x]    //x is explicitly captured by value. Other variables will be captured by reference
[=, &z]   //z is explicitly captured by reference. Other variables will be captured by value

(2)(parameters) :()内为形参,和普通函数的形参一样。

(3)-> return_type:->后面为lambda函数的返回类型,如 -> int-> string等。一般情况下,编译器推出lambda函数的返回值,所以这部分可以省略不写。

(4){ /* … */ }:   {}内为函数主体,和普通函数一样。

举例:定义 lambda函数

auto add = [](int a,int b) ->int {  return a + b;   };
此处为 lambda函数定义,所以左边为函数指针类型变量,一般懒的写函数指针类型,可以直接赋值给 auto类型变量。

lambda函数使用、运行

方法一:直接用 auto 变量接收 lambda函数返回值

auto add = [](int a,int b) ->int return a + b;   };

int result  = add(1,2);

方法二:定义函数指针接收 lambda函数返回值

auto add = [](int a,int b) ->int {  return a + b;   };
int(*func_ptr)(int,int) = add ;
int result = func_ptr(1,2);

2:Lambda表达式应用实例

lambda表达式原理: 就是函数对象更高级的实现!

现在我们看一下:通过 Lambda表达式对 Vector进行排序

// main.cpp#include<vector>
#include<algorithm>
#include<iostream>
int main() {std::vector<int> vec;for (int i = 0; i < 3; i++){vec.push_back(i);}// 定义lambda比较器传给 sort函数做比较.做降序排列(注意 sort函数默认阿是升序排列的)std::sort(vec.begin(), vec.end(), [](int a, int b)->bool {return a > b;});//打印比较后的结果for (int val : vec) {std::cout << val << std::endl;}}// 打印结果
2
1
0

总结:前两篇我们分析了:函数指针,函数对象指针,Lambda表达式用法,这三种情况下,其实代码还是比较繁琐复杂的,那么我们可以想一下,是否可以有一种简单的技术,来把这些情况都包含起来了 ?按照面向对象的思想,来处理这些情况了 ? 有的,C++中  std::function 这个类就是可以实现。

std::function是C++标准库中的一个模板类,用来保存一个函数、仿函数或lambda表达式。

好,下篇文章我们就分析 C++ 标准库中 这个模板类。

C++:函数指针进阶(三):Lambda函数详解相关推荐

  1. 函数指针的用法以及用途详解

    在C++中,指针是一个核心的部分,常规的指针用法作者已经在另外一篇文章中有过详细介绍,这篇文章主要是针对函数指针进行讨论. 首先我们先来认识一下函数指针的概念,我们平时在写函数的时候,调用函数时总是以 ...

  2. js 将内部函数变成全局函数_js中三种作用域详解(全局,函数,块级)

    1.全局变量:声明在函数外部的变量(所有没有var直接赋值的变量都属于全局变量) 2.局部变量:声明在函数内部的变量(所有没有var直接赋值的变量都属于全局变量) JS中变量申明分显式申明和隐式申明. ...

  3. Replication进阶(三) 复制心跳详解

    心跳 心跳,这个词在不同人的脑袋里,第一反应会想到不同的东西,比如说医护人员,想到的是 '砰~砰~砰~';linux网络编程的人想到可能是客户端与服务端的探活机制,比如TCP协议的心跳,或者应用层自己 ...

  4. C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转

    目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...

  5. 详解函数指针和类成员函数指针

    作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...

  6. 指针详解(包含指针,指针数组,数组指针,指向数组指针的指针,函数指针,函数指针数组,指向函数指针数组的指针)

    大家都知道,指针有双面性,灵活度高,但是运用时一定要避免野指针和空指针的出现.否则会出现一些意想不到的错误.话不多说,看下面的代码: int main() {int arr[10] = { 0 };/ ...

  7. C语言指针的那些事:第三篇(函数指针,指针函数,函数指针数组,指向函数指针数组的指针)

    文章目录 1. 函数指针 1)函数指针的例题 2. 指针函数 3. 函数指针数组 1)函数指针数组的用途 4. 指向函数指针数组的指针 5. 一些后话 1. 函数指针 函数指针就是指向函数的指针:本质 ...

  8. 三种函数指针的表达以及函数指针概念讲解

    三种函数指针的表达以及函数指针概念讲解 函数指针的概念 三种表达函数指针的方法 函数指针的概念 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为 ...

  9. 定时器 槽函数没执行_Web服务器项目详解 07 定时器处理非活动连接(上)

    点击"两猿社" 关注我们 Web服务器详解目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接 ...

  10. c++ lambda函数_C++11 之 lambda函数的详细使用

    1. lambda 函数概述 lambda 表达式是一种匿名函数,即没有函数名的函数:该匿名函数是由数学中的λ演算而来的.通常情况下,lambda函数的语法定义为: [capture] (parame ...

最新文章

  1. Android应用程序窗口(Activity)的测量(Measure)、布局(Layout)和绘制(Draw)过程分析(上)...
  2. Go-实现猜数字游戏代码
  3. ActionRequestValidationException[Validation Failed: 1: script or doc is missing
  4. python编程小游戏-python趣味入门——写几个常玩的游戏
  5. 分治法:快速排序,3种划分方式,随机化快排,快排快,还是归并排序快?
  6. Python小游戏(XO大战)
  7. 浅析Hadoop文件格式
  8. java后台代码添加超链接_Java 添加超链接至Excel文档
  9. LTE学习:天线端口数目和物理天线数目关系
  10. )类 新建javafx程序时_CML Copley提供的运动控制程序开发类库
  11. Android 保持屏幕常亮
  12. Struts action-mapping 元素讲解
  13. [含论文+答辩PPT+任务书+中期检查表+源码等]S2SH洋酒销售系统|商城
  14. 阻滞增长模型求解_阻滞增长模型logistic模型.ppt
  15. SAP VK11 报错“条件不能创建在分销渠道 10 中”
  16. 绕过tp路由器管理密码_TP-Link路由器登录密码怎么重置【详细介绍】
  17. 4199 公约数(求解约数 + 最大公约数 + 二分)
  18. 重启服务器后docker wordpress “Error establishing a database connection”解决办法
  19. element ui自定义图标
  20. 网站SEO实践之 - seo引流怎么选有流量的关键词

热门文章

  1. 中小型网络系统总体规划与设计方法(二 )
  2. Git系列(四)、在IDEA操作Git本地仓库与连接远程Git仓库(推送、合并、拉取、克隆操作)
  3. vscode的中文支持
  4. python3--日期时间处理最近n个自然周计算
  5. 使用Angular和API服务器显示相关表中的数据
  6. HR:说说你最大的优缺点?
  7. java-十六进制转八进制
  8. PHP Redis的运用篇(一)
  9. HDU4801 转魔方、DFS模拟
  10. sql语句,如何找出重复的数据