#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. 生成 MFC ActiveX (OCX)时,报错:MSB801:未能注册输出

    我们在生成 ocx 控件时,报错:MSB801:未能注册输出,如下图: 解决方法: 1.打开 项目属性 -> 链接器 -> 常规  :  逐用户重定向 改为  是 2. 重新生成 如果此时 ...

  2. keycloak~对架构提供的provider总结

    提供者目录 Provider Authenticator BaseDirectGrantAuthenticator AbstractFormAuthenticator AbstractUsername ...

  3. HarmonyOS API Version 7版本特性说明

    2020年9月11日,HarmonyOS SDK发布了首个Beta版本,支持基于HarmonyOS的华为智慧屏.智能穿戴.车机设备开发,让广大的开发者正式步入了HarmonyOS应用开发之旅. 开发者 ...

  4. HarmonyOS助力构建“食用菌智慧农场”

     原文:https://mp.weixin.qq.com/s/qK4aRY5UKc3GvpLxhwpqww,点击链接查看更多技术内容.   [开发者说]栏目是为HarmonyOS开发者提供的展示和分享 ...

  5. scala 生成指定日期范围的list

    可以通过scala中的流处理,生成指定范围内的日期list import java.time.LocalDate def dateStream(fromDt:LocalDate):Stream[Loc ...

  6. 升级gradle:Could not find method jackOptions() for arguments

    前言 这是我在升级gradle发生的错误. 解决 原因是被废弃了: 删除: jackOptions { enabled true } 解释一下什么是jack: Jack 是 Java Android ...

  7. 老夫当年手写的js动画库

    前言 当年我学习js的时候,那时候学生时代不知道有jquery,所以手写了一些东西,留下的不多作为回忆. 正文 ``` javascript window.onload = function () { ...

  8. SVM简单分类的使用 sklearn机器学习

    # sklearn 库中导入 svm 模块 from sklearn import svm # 定义三个点和标签 X = [[2, 0], [1, 1], [2,3]] y = [0, 0, 1] # ...

  9. Exception in thread "main" java.util.NoSuchElementException

    Exception in thread "main" java.util.NoSuchElementException 用了两个scanner的时候,执行程序发生报错:Except ...

  10. 力扣197(MySQL)-上升的温度(简单)

    题目: 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id . 返回结果 不要求顺序 . 查询结果格式如下例. 解题思路: 方法一:使用窗口函数la ...