c++11特性(3)

news2025/4/19 16:27:54

1.lambda表达式

a.出现由来:

以sort为例,我们可以传入一个仿函数对自定义类型进行排序。但是,对每一种比较方式我们都要显示传一个仿函数太麻烦。要是乱命名更加要命,那就除了写这段代码的人没人看得懂了!

b.lambda表达式的格式:

[]()->{} :[]是捕捉列表

            :()是参数列表

             :->返回值类型

             :{}函数体

c.->返回值基本可以省去,可以自动推导。

d.可以写无参数的lambda表达式,捕捉列表可以捕捉当前父作用域(当前栈帧)的所有变量。

例:

#include<iostream>


using namespace std;


int main()
{
	int a = 10; int b = 20;
	auto swap = [&a, &b]() {int temp; temp = a; a = b; b = temp; };
    //用&才可以传引用改变值
	swap();
	cout << a <<" "<< b << endl;
	return 0;
}

   

 e.对于无参数的lambda表达式

“=”表示将所有变量传值传入,“&”表示传地址,同时可以混用,例:

#include<iostream>


using namespace std;


int main()
{
	int a = 10; int b = 20; int c = 30; int d = 40;
	auto fun = [=, &d]()
	{
		cout << a << endl;
		cout << b << endl;
		cout << c << endl;
		d = 50;
		cout << d << endl;
	};
	fun();
	return 0;
}

f.lambda表达式底层和仿函数完全一致


 2.包装器(function)

顾名思义,包装器使用来将不同的函数指针或者lambda亦或者成员函数打包分类。

上一个例题看看使用场景:

题名:力扣(150. 逆波兰表达式求值)想看看的戳这里

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<long long> st;
        //不用function得搞一大堆判断
        map<string,function<long long(long long,long long)>> mp=
        {
            {"+",[](long long a,long long b){return a+b;}},
            {"-",[](long long a,long long b){return a-b;}},
            {"*",[](long long a,long long b){return a*b;}},
            {"/",[](long long a,long long b){return a/b;}}
        };
        for(auto& e:tokens)
        {
            if(mp.count(e))
            {
                //先取出的是右边的值
                long long right=st.top();
                st.pop();
                //再取出的是左边的值
                long long left=st.top();
                st.pop();
                //将出栈的两个数运算一下,再将结果存入栈当下一次运算的左值。
                long long ret=mp[e](left,right);
                st.push(ret);
            }
            else
            {
                st.push(stoll(e));
            }
        }
        //剩下的那个值就是结果
        return st.top();
    }
};


3.bind的用法

bind在我看来就是为了将特定的函数参数固定。以对类的成员函数包装为例子,因为成员函数必须要实力对象才能调用,所以在不用bind的前提下,我们必须显示传一个匿名对象来调用该函数。

class Sub
{
public:
	int sub(int a, int b)
	{
		return a - b;
	}
};
int main()
{

	function<int(int, int)> funcSub = bind(&Sub::sub, Sub()//直接传一个匿名对象, _1, _2);
	int ret = funcSub(20, 5);
	cout << ret << endl;
}

 

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

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

相关文章

基于象虫损害优化算法的投资组合问题(Matlab代码实现)

&#x1f4dd;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;…

我的写作心得

前言 首先&#xff0c;博主是一个在校高中生&#xff0c;平常可以说几乎没有时间来创作文章&#xff0c;所以说断更也是很正常的 时隔半年&#xff0c;我也在csdn累计了400多个粉丝&#xff08;截止我创作这篇文章的时候&#xff09;&#xff0c;从之前的一无所有&#xff0c…

PCL交互选择ROI区域

PCL的配置和如何配准点云可见博主之前的博客 win10环境下PCL安装和配置回顾&#xff08;一&#xff09;_竹叶青lvye的博客-CSDN博客_pcl win10 win10环境下PCL安装和配置回顾&#xff08;二&#xff09;_竹叶青lvye的博客-CSDN博客_win10 安装pcl PCL - 3D点云配准(registra…

状态保持-JWT

“ Web的状态保持技术 -JWT&#xff08;Json Web Token&#xff09;” 在分布式微服务技术流行的今天&#xff0c;大型网站对JWT的使用愈加频繁&#xff0c;相比较于传统的session cookie。 HTTP 是一个无状态的协议&#xff0c;何为无状态呢&#xff1f;就是说这本次请求和上次…

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用(仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献)

【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用&#xff08;仿真、原理图、源代码、低重复参考文档、答辩PPT、英文文献&#xff09; 文章目录【毕业设计】67-基于单片机的三相电压型SPWM逆变器控制设计及应用&#xff08;仿真、原理图、源代码、低重复参考文…

网站文章采集器-万能文章采集器

随着时代的发展。互联网无时不刻地出现在我们的生活中&#xff0c;大家也越来越注重效率&#xff0c;今天小编就给大家来分享一款网站文章采集器。只需要点几下鼠标就能轻松获取数据&#xff0c;不管是导出本地还是发布到网上。网站人员可以实现自动采集&#xff0c;定时发布&a…

[计算机毕业设计]食品安全数据的关联分析模型的应用

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

idea里面完整创建maven项目(包含如何使用)

目录 前言&#xff1a; 1.Maven和Maven Archetype区别&#xff1f; 2.创建maven项目之前的步骤&#xff08;必看&#xff09; 一、创建maven 1.打开idea--->文件--->新建--->项目 2.新建项目--->自定义项目名称--->选择Maven-->创建 3. 创建成功 二、…

微信小程序连接蓝牙汉印HM-A300L标签打印机

需求&#xff1a; 参考文章&#xff1a; 微信小程序实现蓝牙打印 打印机CPCL编程参考手册&#xff08;CPCL 语言&#xff09; 蓝牙打印机CPCL编程手册~汉印HM-A300 无用小知识&#xff1a; A300系列&#xff1a;先将打印机关机然后装好纸&#xff0c;同时按住屏幕左右两边的按…

UDS诊断网络层ISO15765-2(CAN)

诊断协议那些事儿 本文为诊断协议那些事儿专栏文章&#xff0c;从一个 ECU 到另一个 ECU&#xff0c;或外部诊断设备和一个 ECU 之间的通信&#xff0c;不仅依赖前文介绍的诊断寻址方式&#xff0c;更需要关注数据的传输&#xff0c;依赖网络层、传输层协议去完成&#xff0c;…

[附源码]java毕业设计社团管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022.11.09第6次Javaweb上机——实现登录欢迎页面

前情回顾 Myeclipse的安装教程_科大云炬的博客-CSDN博客 【JavaWeb第1次上机练习】安装Tomcat并在本地浏览器成功运行第一个Hello world网站_科大云炬的博客-CSDN博客 【第2次JavaWeb上机练习】_科大云炬的博客-CSDN博客 第3次 JavaWeb上机练习&#xff1a;Servlet基础作业…

python工作任务流flow实时框架:prefect

python工作任务流flow实时框架&#xff1a;prefect prefect是一个python的工作任务流调度实时框架&#xff0c;prefect可以快速构建平台系统复杂模块间工作流的监测。当平台系统模块之间的调用链越来越复杂时候&#xff0c;任务执行起来&#xff0c;已经很难盘点清楚程序逻辑和…

删除链表中重复元素的问题

目录 一、删除所有重复元素&#xff0c;使每个元素只出现一次 1.1带头链表解法 1.2 递归方法 二、删除所有重复数字结点&#xff0c;只留下不同数字 2.1带头链表解法 2.2 递归方法 一、删除所有重复元素&#xff0c;使每个元素只出现一次 给定一个已排序的链表的头 hea…

Android App开发实战项目之模仿美图秀秀的抠图工具(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 所谓抠图神器&#xff0c;就是从一副图片中扣出用户想要的某块区域 一、需求描述 美图的修图功能如此强大&#xff0c;离不开专业的图片加工技术&#xff0c;抠图便是其中重要的一项功能。在App界面底部点击抠图按钮&#xff…

mysql查询:行转列与列转行

目录 1. 行转列 1.1 什么是行转列 1.2 准备工作 1.3 行转列的实现原理 2. 列转行 2.1 什么是列转行 2.2 准备工作 2.3 列转行的实现原理 3. 总结 1. 行转列 1.1 什么是行转列 从表面理解&#xff0c;就是表里存储在行上的数据&#xff0c;在查询结果里展示在列上面。举…

基于stm32单片机随机数自动摇号抽奖系统

资料编号&#xff1a;099 下面是相关功能视频演示&#xff1a; 99-基于stm32单片机随机数自动摇号抽奖系统&#xff08;源码仿真全套资料&#xff09;采用stm32单片机作为主控&#xff0c;LCD1602显示&#xff0c;通过按键来重置生成随机数&#xff0c;类似于摇号和抽奖系统 …

如何实现广义的元交易(Meta Transaction)

在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊? 但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。 什么是元交易?…

(带你分分种学会linux的文件类型和软硬链接)linxu的文件类型(硬链接和软链接详解)

文章目录一&#xff0c;时区部分1&#xff0c;时区状态的展示2,列出所有时区二&#xff0c;linux的文件类型1&#xff0c;列出目录和文件类型2&#xff0c;查看文件类型和状态并且修改用户密码3&#xff0c;文件类型表4&#xff0c;文件的三次修改时间三&#xff0c;linux的软硬…

记录Manjaro Linux安装nvidia显卡驱动失败的经历

我的Manjaro: 2022.11.19的最新系统&#xff0c;通过manjaro-kde-21.3.7-220816-linux515.iso安装&#xff0c;然后通过pacman -Syyu更新的我的设备&#xff1a; CPU intel 12700H&#xff0c;大小核架构&#xff0c;使用系统默认的linux5.15内核会发现启动firefox浏览器的速度…