C++之lambda函数与std::bind区别及用法实例(二百八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Lambda函数与std::bind介绍
    • 🌻3.代码实例
      • 🐓3.1 Lambda函数示例
      • 🐓3.2 std::bind函数示例
      • 🐓3.3 Lambda函数和std::bind结合使用的示例

🌻1.前言

本篇目的:C++之lambda函数与std::bind区别及用法实例

🌻2.Lambda函数与std::bind介绍

  • C++11引入了lambda表达式,这是一种方便快捷的方式来创建匿名函数对象。Lambda函数在C++中非常有用,特别是在需要传递简短的函数作为算法的参数时,例如在std::sort或std::find_if等算法中。Lambda函数可以有参数,并且可以包含一个表达式或者一个花括号内的一系列语句。
  • Lambda函数的基本语法如下:
[捕获列表](参数列表) mutable -> 返回类型 {// 函数体
}
  • 捕获列表用于指定lambda函数如何从外部环境捕获变量。
  • 参数列表定义了函数的参数。
  • mutable修饰符允许在lambda函数中修改通过值捕获的变量。
  • 返回类型可以使用auto推断,或者显式指定。
  • 函数体由花括号包围,可以是单个表达式或者多条语句。
  • 例如,一个lambda函数,接受两个整数参数并返回它们的和:
auto add = [](int a, int b) -> int { return a + b; };
  • std::bind函数用于绑定一个可调用对象(如函数、成员函数、Lambda表达式等)到一个或多个参数。这使得你可以创建一个新的可调用对象,该对象在调用时会使用绑定参数。std::bind常用于回调函数和函数对象,当你需要以特定参数列表调用一个函数,但是又不希望直接传递所有的参数时。
  • std::bind的基本语法如下:
std::bind(可调用对象, 参数列表)
  • 可调用对象是要绑定的函数或Lambda表达式。

  • 参数列表是要传递给可调用对象的参数。

  • Lambda函数与std::bind的主要区别在于:

  1. Lambda表达式创建的是一个匿名函数对象,它可以独立使用,而std::bind返回的是一个新的可调用对象,它依赖于原始的可调用对象。
  2. Lambda表达式可以直接作为函数参数传递,而std::bind通常用于绑定成员函数,并且需要指定对象实例。
  3. Lambda表达式可以有返回类型,而std::bind返回的类型的确切形式取决于被绑定函数的返回类型和参数类型。
  • 总结来说,Lambda表达式和std::bind都是C++11中引入的有用特性,它们提供了不同的方式来创建和使用匿名函数。Lambda表达式适用于需要一个简单的匿名函数对象的场景,而std::bind适用于需要将函数绑定到特定参数列表并创建一个新的可调用对象的场景。

🌻3.代码实例

🐓3.1 Lambda函数示例

#include <iostream>int main() {// 一个lambda函数,接受两个整数参数并返回它们的和auto add = [](int a, int b) -> int { return a + b; };// 使用lambda函数std::cout << add(10, 20) << std::endl; // 输出30// 一个捕获外部变量的lambda函数auto multiply = [x = 10](int y) -> int { return x * y; };std::cout << multiply(20) << std::endl; // 输出200return 0;
}

🐓3.2 std::bind函数示例

#include <iostream>
#include <functional>class MyClass {
public:void myFunction(int a, int b) {std::cout << a + b << std::endl;}
};int main() {MyClass obj;// 使用std::bind绑定成员函数auto boundFunction = std::bind(&MyClass::myFunction, &obj, 10, 20);boundFunction(); // 输出30return 0;
}

🐓3.3 Lambda函数和std::bind结合使用的示例

#include <iostream>
#include <functional>class MyClass {
public:void operator()(int a, int b) {std::cout << a + b << std::endl;}
};int main() {MyClass obj;// 使用lambda函数作为参数传递给成员函数auto memberLambda = [&obj](int a, int b) { obj(a, b); };// 使用std::bind将成员lambda函数绑定到成员函数auto boundMemberLambda = std::bind(memberLambda, 10, 20);boundMemberLambda(); // 输出30return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW如何实现多张图拼接

在LabVIEW中实现相机多次拍摄进行拼接的过程&#xff0c;可以分为以下几个步骤&#xff1a;设置相机参数、控制相机拍摄、图像处理与拼接、显示和保存结果。以下是一个详细的实现方案&#xff1a; 1. 设置相机参数 首先需要配置相机的参数&#xff0c;例如分辨率、曝光时间、…

Java Swing + MySQL图书借阅管理系统

系列文章目录 Java Swing MySQL 图书管理系统 Java Swing MySQL 图书借阅管理系统 文章目录 系列文章目录前言一、项目展示二、部分代码1.Book2.BookDao3.DBUtil4.BookAddInternalFrame5.Login 三、配置 前言 项目是使用Java swing开发&#xff0c;界面设计比较简洁、适合作…

react-d3-tree:React组件创建交互式D3树形图

在这里插入代码片import React from "react"; import ReactDOM from "react-dom"; import Tree from "react-d3-tree";import "./styles.css";const myTreeData [{name: "Gaurang Torvekar",attributes: {keyA: "val …

基于Llama 3搭建中文版(Llama3-Chinese-Chat)大模型对话聊天机器人

前面两篇博文&#xff0c;我们分别在个人笔记本电脑部署了Llama 3 8B参数大模型&#xff0c;并使用Ollama搭建了基于 Web 可视化对话聊天机器人&#xff0c;可以在自己电脑上愉快的与Llama大模型 Web 机器人对话聊天了。但在使用过程中&#xff0c;笔者发现Llama大模型经常出现…

OpenWrt U盘安装使用 详细教程 x86/64平台 软路由实测 系列一

1 官方稳定 版:OpenWrt 23.05 OpenWrt Downloads #根据实际情况选择 PC支持uefi,选择版本&#xff1a;https://downloads.openwrt.org/releases/23.05.3/targets/x86/64/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img.gz 2 rufus 制作U盘启动 3 制作好的U盘,接入主…

基于集成经验模态分解的心电信号降噪和基于希尔伯特变换的R峰检测(MATLAB R2018)

近年来&#xff0c;心脏病已成为危害人类健康最常见的疾病。为了有效预防心脏疾病的发生&#xff0c;往往需要更加准确地采集与诊断心电信号&#xff0c;以便于更好地反映心脏情况。心电信号作为人体生理信号&#xff0c;对于识别心脏异常和心脏疾病具有重要的参考价值。心电信…

ROS基础学习-ROS通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python0.前言 机器人是一种高度复杂的系统性实现,在机器人上可能集成各种传感器(雷达、摄像头、GPS…)以及运动控制实现,为了解耦合,在ROS中每一个功能点都是一个单独的…

从File类开始,学习Java文件操作

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

windows安装SQL Server

1、下载 下载网页&#xff1a;SQL Server 下載 | Microsoft 2022版下载地址&#xff1a;https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下载结果&#xff1a;SQL2022-SSEI-Dev.exe 打开选第三个&#xff0c;下载介质&…

自定义Linux命令,显示docker镜像、容器信息

1、修改环境变量&#xff08;仅对当前用户有效&#xff09; vim ~/.bashrc2、给命令取别名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、让配置重新生效 source ~/.bashrc4、测试&…

【docker】仓库harbor的部署

harbor介绍 Harbor 是一个用于存储和管理 Docker 镜像的开源仓库。它提供了一系列的功能&#xff0c;比如用户管理、访问控制、镜像管理、日志审计和安全扫描等。Harbor 可以作为私有仓库来使用&#xff0c;也可以与公有仓库&#xff08;如 Docker Hub&#xff09;集成使用。 …

python数据分析——apply 1

参考资料&#xff1a;活用pandas库 apply是指把函数同时作用于DataFrame的每一行或每一列。类似于编写一些跨每行或每列的for循环&#xff0c;并同时调用apply函数。 1、函数 函数是对python代码进行分组和复用的一种方法。如果某段代码会被多次使用&#xff0c;并且使用时是需…

优化FPGA SelectIO接口VREF生成电路

引言&#xff1a;FPGA设计中使用了各种PCB SelectIO™接口VREF生成电路。有时即使在以前的设计中已经成功的在电路板上设计了VREF生成电路&#xff0c;也会在VREF引脚上发现大量噪声&#xff08;200–400mV&#xff09;。大量VREF噪声的存在可能导致高性能SelectIO接口&#xf…

瑞昱半导体AMB82 MINI(RTL8735B)Arduino 方法介绍

介绍瑞昱半导体&#xff08;Realtek &#xff09;AMB82-Mini 物联网 AI开发板 Ameba是一个易于编程的平台&#xff0c;用于开发各种物联网应用程序。AMB82 MINI配备了各种外设接口&#xff0c;包括WiFi、BLE、GPIO INT、I2C、UART、SPI、PWM、ADC。通过这些接口&#xff0c;AM…

找出只出现一次的数字

输入一些数字&#xff0c;每个数字以逗号分隔&#xff0c;其中有一个数字出现1次&#xff0c;其余数字均会出现2次。请找出那个只出现一次的数字! 提示&#xff1a;使用字典的方式实现 # 输入一些数字&#xff0c;每个数字以逗号分隔 input_nums input("请输入一些数字…

从0开始学统计-秩和检验

1.什么是秩和检验&#xff1f; 秩和检验&#xff0c;也称为Wilcoxon 秩和检验&#xff0c;是一种非参数统计检验方法&#xff0c;用于比较两个独立样本的中位数是否有显著差异。它不要求数据满足正态分布假设&#xff0c;因此适用于小样本或者数据不满足正态分布假设的情况。 …

51单片机-实机演示(单个数码管)

仿真单个数码管链接&#xff1a;http://t.csdnimg.cn/BLMut 一。插线 注意P00连接到A 测试代码为 #include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器// sbit KEY2 P3^2; // 独立按键2void main() {P0 0x00;while (1) {}…

kaggle竞赛实战3

接前文&#xff0c;本文主要做以下几件事&#xff1a; 1、把前面处理完的几个表拼成一个大表 2、做特征衍生&#xff08;把离散特征和连续特征两两组合得出&#xff09; # In[89]: #开始拼接表 transaction pd.concat([new_transaction, history_transaction], axis0, ignor…

JAVA实现图书管理系统(初阶)

一.抽象出对象: 1.要有书架&#xff0c;图书&#xff0c;用户&#xff08;包括普通用户&#xff0c;管理员用户&#xff09;。根据这些我们可以建立几个包&#xff0c;来把繁杂的代码分开&#xff0c;再通过一个类来把这些&#xff0c;对象整合起来实现系统。说到整合&#xf…

[数组查找]2.图解二分查找及其代码实现

二分查找 二分查找也是一种在数组中查找数据的算法。和线性查找不同&#xff0c;它只能查找已经排好序的数据。二分查找通过比较数组中间的数据与目标数据的大小&#xff0c;可以得知目标数据是在数组的左边还是右边。因此&#xff0c;比较一次就可以把查找范围缩小一半。重复执…