#include <iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<ctime>
using std::cout;
using std::vector;
using std::srand;
using std::time;
using std::generate;
using std::endl;
using std::count_if;
using std::for_each;
using std::rand;
const long Size = 390000L;
int main()
{
std::cout << "Hello World!\n";
vector<int> numbers(Size);
srand(time(0));
generate(numbers.begin(), numbers.end(), rand);
cout << "Sample Size=" << Size << endl;
int m = 3;
int count3 = count_if(numbers.begin(), numbers.end(), [m](int x) { return x % m == 0; }); cout << "mode by 3==0's count=" << count3 << endl;
int count13 = count_if(numbers.begin(), numbers.end(), [](int x)->bool {return x % 13 == 0; });
cout << "mode by 13==0's count=" << count13 << endl;
count3 = 0;
count13 = 0;
cout << "=====================\n";
for_each(numbers.begin(), numbers.end(), [&count3, &count13](int x) {count3 += x % 3 == 0; count13 += x % 13 == 0; });
cout << "mode by 3==0's count=" << count3 << endl;
cout << "mode by 13==0's count=" << count13 << endl;
int* p1 = new int(0);
int* p2 = new int(0);
cout << "=====================\n";
for_each(numbers.begin(), numbers.end(), [=](int x) {*p1 += x % 3 == 0; *p2 += x % 13 == 0; });
cout << "mode by 3==0's count=" << *p1 << endl;
cout << "mode by 13==0's count=" << *p2 << endl;
delete p1;
delete p2; int* p3= new int[2];
p3[0] = 0;
p3[1] = 0;
cout << "=====================\n";
for_each(numbers.begin(), numbers.end(), [=](int x) {*p3+= x % 3 == 0; p3[1] += x % 13 == 0; });
cout << "mode by 3==0's count=" << *p3 << endl;
cout << "mode by 13==0's count=" << p3[1] << endl;
delete[]p3; }
在lambda中 返回类型可以根据 函数体的返回值自动确定。
也可以[](int x)->bool这样明确指出来。
返回为void 可以不写。
[=],表示表达式内部可访问外部的所有动态变量,指针 new什么创建的变量。
[&count3],表示访问count3的引用,没有创建副本,这样可以给count3赋值。
int m=3;
[m] (int x) { return x % m == 0; },这种不可以在表达式内部赋值,只在表达式里做只读变量。
lambda 省略了函数名用索引代替,入参有的话还是需要要写类型 比如 int x。
需要特定访问符号才能访问到表达式外部的变量。

c++ lambda学习举例的更多相关文章

  1. Java 8的Lambda学习

    参考资料:https://www.dotnetperls.com/lambda-java Lambdas用于创建函数对象.通过它们,我们可以在其它方法内部指定方法,甚至可以把方法做为参数传递给其它方法 ...

  2. Lambda学习总结(三)--方法引用

    一.方法引用 1.1 方法引用含义 在学习了 Lambda 表达式之后,我们通常会使用 Lambda 表达式来创建匿名方法.但有的时候我们仅仅是需要调用一个已存在的方法.如下示例: @Function ...

  3. Lambda学习---方法引用和其他基本应用

    package com.zx; import java.util.*; import java.util.function.*; import java.util.stream.Collectors; ...

  4. Lambda学习总结(二)--Stream流

    一.Stream 流 1.1 概念 官方解释:可以支持顺序和并行对元素操作的元素集合. 简单来讲,Stream 就是 JDK8 提供给我们的对于元素集合统一.快速.并行操作的一种方式. 它能充分运用多 ...

  5. Lambda学习总结(一)--函数式接口

    Lambda 表达式是 JDK 1.8 里面的一个重要更新,这意味着 Java 也开始承认了函数式编程,并且尝试引入其中,我们今天就来了解下它的使用. 一.函数式接口 1.1 概念 函数式接口在 Ja ...

  6. Python的lambda学习

    lambda可以简化简单循环,如下: def fc1(x): return x + 10 print "fc1(23) = ", fc1(23) y = lambda x: x+1 ...

  7. Java8 新特性 Lambda学习

    import java.util.ArrayList;import java.util.Collections;import java.util.IntSummaryStatistics;import ...

  8. Lambda学习---StreamApi使用

    package com.zx; import com.zx.entity.Book; import org.junit.Test; import java.time.LocalDate; import ...

  9. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  10. .NET开发者必须学习.NET Core

    很多的.NET开发者在接触.Net Core之前,对于linux系统一点也不了解,也未曾有过主动去学习的念头.在接触了.Net Core之后才会慢慢学习linux相关知识,很多同学想转Java,这个很 ...

随机推荐

  1. openGauss数据库扩容指导

    前置条件 当前集群状态正常 操作步骤 1.新节点创建用户和用户组,注意需要与当前集群的用户与用户组一致,密码也要保持一致.假设当前集群用户为 omm. 2.检查新节点环境变量,清理和 openGaus ...

  2. MogDB/openGauss如何实现事务的rollback

    MogDB/openGauss 如何实现事务的 rollback 本文出处:https://www.modb.pro/db/113262 数据库最主要的功能就是存储数据,然而我们在进行数据库操作时,却 ...

  3. 基于 Scriptable 从零开始美化iOS桌面(一)

    今天我为大家带来新的作品,iOS17桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上... * script : ONE-Progress.js * v ...

  4. Android Studio制作简单登录界面

    实现目标 应用线性布局设计登录界面,要求点击输入学号时弹出数字键盘界面,点击输入密码时弹出字母键盘,出现的文字.数字.尺寸等全部在values文件夹下相应.xml文件中设置好,使用时直接引用.当用户名 ...

  5. python数据库迁移

    实际操作命令 1,python 文件.py db init 2,python xx.py db migrate -m '版本描述' 3,python xx.py db upgrade 4,python ...

  6. Django框架——csrf跨站请求伪造、csrf校验、csrf相关装饰器、auth认证、auth认证相关模块及操作

    csrf跨站请求伪造 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但操作的结果会影响到用户正常的网站账户 但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但是 ...

  7. Linux下的常见基本指令

    pwd //显示当前用户所在的路径 ls //显示当前路径下的文件名或者目录名称 ls-l //显示当前路径下的文件或者目录的更详细的属性信息 cd 一个目录路径 //进入一个目录,进去后,可以用pw ...

  8. Dapr Outbox 执行流程

    Dapr Outbox 是1.12中的功能. 本文只介绍Dapr Outbox 执行流程,Dapr Outbox基本用法请阅读官方文档 .本文中appID=order-processor,topic= ...

  9. [Mobi] 什么是手机 Root 和 Magisk、Magisk App

    手机进行 Root 操作就是让我们能够拥有超级权限,包括被手机厂商所禁止的一些操作. 传统 Root 手段会修改系统文件,因而一些安全性要求较高的 App 会禁止自己在 Root 过的手机上运行. M ...

  10. [BEX] Quasar BEX 提供的那些配置

    Manifest.json https://developer.chrome.com/extensions/manifest Background Script & Content Scrip ...