c加加11第二弹~

1lambda

1.1.lambda表达式书写格式

[capture-list] (parameters) mutable -> return-type { statement}

1.2lambda表达式各部分说明 

[capture-list] : 捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。

(parameters):参数列表。与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略

mutable:可选的。如果指定了mutable,那么lambda体内部可以修改通过值捕获的外部变量的值。

->return-type:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推导。

{statement}:函数体。在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量。

注意: 在lambda函数定义中,参数列表和返回值类型都是可选部分,而捕捉列表和函数体可以为 空。因此C++11中最简单的lambda函数为:[]{}; 该lambda函数不能做任何事情。

1.3.捕获列表说明

捕捉列表描述了上下文中那些数据可以被lambda使用,以及使用的方式传值还是传引用。

[]:不捕获任何变量

[var]:表示值传递方式捕捉变量var

[=]:表示值传递方式捕获所有父作用域中的变量(包括this)

[&var]:表示引用传递捕捉变量var

[&]:表示引用传递捕捉所有父作用域中的变量(包括this)

[this]:表示值传递方式捕捉当前的this指针

 注意:    a. 父作用域指包含lambda函数的语句块  

  b. 语法上捕捉列表可由多个捕捉项组成,并以逗号分割。

 比如: [=, &a, &b]:以引用传递的方式捕捉变量a和b,值传递方式捕捉其他所有变量
       [&,a, this]:值传递方式捕捉变量a和this,引用方式捕捉其他变量

c. 捕捉列表不允许变量重复传递,否则就会导致编译错误。

 比如:[=, a]:=已经以值传递方式捕捉了所有变量,捕捉a重复

d. 在块作用域以外的lambda函数捕捉列表必须为空。   

 e. 在块作用域中的lambda函数仅能捕捉父作用域中局部变量,捕捉任何非此作用域或者非局部变量都会导致编译报错。

   f. lambda表达式之间不能相互赋值,即使看起来类型相同。 

2.捕捉列表

lambda表达式中默认只能用lambda函数体和参数中的变量

3默认的移动构造和移动赋值

 默认移动构造、默认移动赋值自动生成的条件

如果需要用一个右值去拷贝构造一个类对象或赋值给一个类对象,则在该类自定义了移动构造函数/移动赋值函数的情况下,会调用该类自定义的移动构造函数/移动赋值函数

而在没有自定义移动构造函数/移动赋值函数的情况下,如果该类自定义了拷贝构造函数/赋值运算符或析构函数之一,都只会调用拷贝构造函数/赋值运算符(前提是形参为const T&而不是T&,因为const T&可以兼容右值实参,而T&不能)而不会生成默认移动构造函数。注意即使没有自定义拷贝构造函数/赋值运算符,只自定义了析构函数,也不会生成默认移动构造函数,这是因为自定义析构函数表明该类在析构时可能需要回收内存,如果生成了默认移动构造函数可能会出错(比如同一地址被释放两次的错误)

没有声明拷贝构造函数

没有声明赋值运算符

没有声明析构函数

 默认移动赋值什么时候会自动生成?

没有声明拷贝赋值函数。 没有声明拷贝构造函数。

没有声明移动构造函数。

移动赋值函数没有隐式声明为delete。

没有声明析构函数。

 

4.STL中的一些变化

 新容器

 

 1、array容器 array就是一个静态数组,其有两个模板参数,第一个模板参数代表的是存储的数据类型,第二个是非类型模板参数,代表的是存储元素的个数:

int main()
{
    array<int, 10> a1;
    array<double, 15> a2;
    return 0;
}

array和普通数组最大的区别在于对于越界访问的检查

int main()
{
    int a[10];
    cout << a[10] << endl;//越界不一定能检查出来
    array<int, 10> b;
    cout << b[10] << endl;//只要越界,一定能检查出来
    return 0;

 总结:

1.array容器的对象是建立在栈区的,不适合定义大数组 array容器的设计可能是为了代替静态数组,因为array容器更安全,能够检查除越界的错误,而静态数组并不一定能够检查出来。

2.array数组有的东西vector都有,个人认为还是vector香

补充

2、forward_list容器 forward_list容器本质就是一个单链表,相比list的区别在于forward_list节省了空间,实际使用上使用forward_list的比率还是比较低的,还是使用list来的方便。

3、unordered_map和unordered_set容器 比较实用,后面专门出一篇博文介绍。

容器中的一些新方法 如果我们再细细去看会发现基本每个容器中都增加了一些C++11的方法,但是其实很多都是用得比较少的。 C++11更新后,容器中增加的新方法最后用的插入接口函数的右值引用版本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录|多线程和异步简单理解

目录 前言一、单线程二、多线程-Thread多线程是都多少个的时候会导致性能变差 三、多线程-Task类Task的优势 四、异步- awaitawait注意&#xff1a;多个Task Run()天剑await后&#xff0c;变成了同步执行解决方法 更新时间 前言 参考视频&#xff1a;C#基础教程 多线程编程入门…

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1&#xff1a;同步发电机稳态相量图 若发电机为凸极式&#xff0c;由于凸极机正、交轴同步电抗不等&#xff0c;即xd≠xq&#xff0c;因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…

C语言原码、反码和补码的详解

C语言原码、反码和补码的详解 放在最前面的1、前言正数的原码、反码和补码负数的原码、反码和补码 2、整数的原码&#xff08;2.1&#xff09;原码的定义&#xff08;2.2&#xff09;计算原码 3、整数的反码&#xff08;3.1&#xff09;反码的定义&#xff08;3.2&#xff09;计…

idea 导入Spring源码遇到的坑并解决

1.下载相关文件 通过百度网盘分享的文件&#xff1a;Spring 链接&#xff1a;https://pan.baidu.com/s/1r9rkGOCaY9SFn9ecng5cIg?pwd8888 提取码&#xff1a;8888 2.配置gradle环境 gradle下载地址 需要翻墙下 https://services.gradle.org/distributions/ 我选择的是 grad…

Redis-“自动分片、一定程度的高可用性”(sharding水平拆分、failover故障转移)特性(Sentinel、Cluster)

文章目录 零、写在前面一、水平拆分(sharding/分片)、故障转移(failover)机制介绍水平拆分&#xff08;Sharding&#xff09;故障转移机制 二、Redis的水平拆分的机制有关的配置1. 环境准备2. 配置文件配置3. 启动所有Redis实例4. 创建集群5. 测试集群读/写6. 集群管理 三、Red…

C++STL详解(九)map和set的使用

一.关联式容器的介绍 CSTL包含了序列式容器和关联式容器&#xff1a; 序列式容器里面存储的是元素本身&#xff0c;其底层是线性的数据结构&#xff0c;就譬如我们之前学习的vector&#xff0c;list&#xff0c;deque等等。关联式容器里面存储的是<key,value>的键值对&…

goframe开发一个企业网站 模版界面4

###goframe已有了模板的功能 {{"string"}} // 一般 string {{raw string}} // 原始 string {{c}} // byte {{print nil}} // nil 也被支持 {{. | FuncA | FuncB | FuncC}}{{if .condition}}... {{else}}{{if .condition2}}...{{end}} {{end}}{{rang…

一、k8s快速入门之学习Kubernetes组件基础

一、三个容器管理器平台 Apache MESOS 开源的分布式资源管理框架&#xff0c;被推特选为基础平台&#xff0c;2019年推特换位k8s&#xff0c;MESOS最新版可以在MESOS上管理k8sDOCKER SWARM docker总部发行的&#xff0c;实现docker的集群方案&#xff0c;和docker捆版一起&…

初始JavaEE篇——多线程(7):定时器、CAS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 定时器的使用 定时器的原理 模拟实现定时器 CAS 介绍 CAS的应用场景 解析 AtomicInteger 类 实现自旋锁 CAS的缺陷…

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

项目背景 在这个项目中&#xff0c;我们希望实现一个简单的游戏系统&#xff0c;其中玩家可以通过击中目标来获得分数&#xff0c;同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示&#xff0c;以便玩家能够随时了解自己的状态。 技术实现 1. 静态变量的使…

stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候&#xff0c;发现PA15引脚无论配置输出高还是低或者输入&#xff0c;均只能输出3.3V的高电平。 目前STM的硬件调试有两种方法&#xff0c;JTAG和SW的方式&#xff0c;目前个人认为最好的方式就是SW&#xff0c;因为它只占用PA13和PA14两个IO。而JTAG还要多占用…

MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现&#xff1a;仿真并获取低轨卫星与指定区域地面站的可见性数据 本次仿真主要参考了多篇文献和网站&#xff0c;包括但不限于&#xff1a;《Using MATLAB for STK Automation》、CSDN博文&#xff1a; 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容…

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具&#xff0c;与Python相结合&#xff0c;可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值&#xff0c;不仅可以极大地提高工作效率&#xff0c;减少重复劳动&#xff0c;还能增强数据处理流程的…

Golang | Leetcode Golang题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; func findMaxLength(nums []int) (maxLength int) {mp : map[int]int{0: -1}counter : 0for i, num : range nums {if num 1 {counter} else {counter--}if prevIndex, has : mp[counter]; has {maxLength max(maxLength, i-prevIndex)} …

提升网站安全性 HTTPS的重要性与应用指南

内容概要 在如今数字化快速发展的时代&#xff0c;网站安全显得尤为重要。许多用户在访问网站时&#xff0c;尤其是涉及个人信息或金融交易时&#xff0c;对数据传输的安全性有着高度的关注。HTTPS&#xff08;超文本传输安全协议&#xff09;正是为了满足这种需求而诞生的。通…

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块&#xff08;Patient Relationship Module&#xff09; 2. 病人识别模块&#xff08;Patient Identification Module&#xff09; 3. 病人统计模块&#xff08;Patient Demographic Module&#xff09; 4. 病人医学模块&#xff08;Pati…

编写高性能爬虫抓取股票行情数据

最近给一个私募大佬帮忙做了一些股票交易有关的系统&#xff0c;其中涉及到行情数据抓取的问题&#xff0c;一番摸索之后&#xff0c;把成果在这里做个分享。 我把行情抓取的部分&#xff0c;和一个写手记的小功能&#xff0c;单独拿了出来放在一个小系统里面&#xff0c;可以…

人像摄影笔记(自用)

相机的原理&#xff1a;镜头--CMOS传感器---通过ISP的计算 然后通过手机的GPU处理后呈现出图片的形式 镜头&#xff1a;定焦和变焦&#xff0c;变焦分为光学变焦和数字变焦 光学变焦&#xff1a;焦距变了 画质不变 数字变焦&#xff1a;焦距不变 裁剪画质 数字变焦一…

前端埋点与监控最佳实践:从基础到全流程实现.

前端埋点与监控最佳实践&#xff1a;从基础到全流程实现 大纲 我们会从以下三个方向来讲解埋点与监控的知识&#xff1a; 什么是埋点&#xff1f;什么是监控&#xff1f; JS 中实现监控的核心方案 写一个“相对”完整的监控实例 一、什么是埋点&#xff1f;什么是监控&am…

电能质量治理产品在分布式光伏电站的应用

1.概述 随着全球对可再生能源需求的不断增长&#xff0c;分布式光伏电站的建设与扩张正迅速发展。然而&#xff0c;在其运行过程中&#xff0c;分布式光伏电站遭遇了一系列挑战&#xff0c;包括企业关口计量点功率因数降低和谐波污染等问题。这些问题不仅影响了光伏电站的运行…