lambda表达式可以允许我传递任意可调用对象,必须要有捕获列表和函数体,标准形式是[捕获列表] (参数列表)->return tpye{函数体}

谓词:一元谓词指的是只能接受一个传入参数,二元谓词指的是接受两个参数。

如果没有写返回类型[](){};这样有两种情况:1、函数体类只能有一个return语句,2、如果有多余两条语句,返回的就是void

有多条语句还想返回其他类型,必须用标准形式eg;[] (int i)->int{if (i>0) return i;else return -i;}

for_each()里面的第三个参数是一个函数,可以是lambda表达式。

#include<iostream>
#include<vector>
#include<algorithm> using namespace std;
int main() {
vector<int> vec(10,1);
transform(vec.begin(), vec.end(), vec.begin(), [](int i) { return ++i; });
for_each(vec.begin(), vec.end(), [](int i) {cout << i<<" "; });
cout << endl;
}

  

	for each(int i in vec)//和上面一样的结果
cout << i << " ";
cout << endl;

 find_if()可以接受一个谓词,lambda表达式,count_if也是,这是和find()以及count()的区别;

void count_ifTest() {
vector<string> vec{"we","happy","lovely"};
size_t countNum = count_if(vec.begin(), vec.end(), [](const string &s) {return s.size() > 4; });
//统计vec中有多少个字符串大小大于4的
cout << countNum << endl;
}

  

3STL算法学习-- for_each( ) 与 transform()

for_each()  对某区间无素执行某种操作.


void print( int &elem)

{

cout<<elem<<endl;

}

for_each(coll.begin(), coll.end(), print) ;

 回为元素以引用方式传递,可以改变区间内的元素,.for_each()还可以返回传递进去的函数对像的副本。

transform() 对某区间无素执行某种操作.操作返回被改动后的元素 可以将操作的结果放到指定的区间


void fun( int elem)

{

  retun elem*elem;

}


transform(coll.begin(), coll.end(), coll.begin(), fun);

lambda表达式和for_each,find_if的更多相关文章

  1. c/c++ lambda 表达式 介绍

    lambda 表达式 介绍 问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素.标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接 ...

  2. 泛型2(lambda表达式/参数绑定)

    lambda 表达式: Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-> return type { fu ...

  3. C++的匿名函数(lambda表达式)

    总述  C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...

  4. 定制操作(传递函数或lambda表达式)

    很多算法都会比较输入序列中的元素.默认情况下,这类算法使用元素类型的<或==运算符完成比较.标准库还为这些算法定义了额外的版本,允许我们提供自己定义的操作来代替默认运算符. 例如,sort算法默 ...

  5. Lambda 表达式的示例-来源(MSDN)

    本文演示如何在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述,请参阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的详细信息,请参阅 Lambda 表 ...

  6. Lambda 表达式的示例

    本文中的过程演示如何使用 lambda 表达式. 有关 lambda 表达式的概述,请参见 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的更多信息,请参见 Lambda 表达式 ...

  7. STL之lambda表达式

    一.简介 我们可以向一个算法传递任何类别的可调用对象.对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用的.即,如果e是一个可调用的表达式,则我们可以编写代码e(args),其中ar ...

  8. Lambda 表达式的演示样例-来源(MSDN)

    本文演示怎样在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述.请參阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的具体信息,请參阅 Lambda 表 ...

  9. C++ 理解函数对象与lambda表达式

    参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...

随机推荐

  1. python 语法-参数注释

    python 语法-参数注释 最近碰到的这样的代码: def func(a:"shuoming") -> int: print("函数已运行.") fun ...

  2. ES5-Object扩展方法

    1.Object新增一个方法,Object.create();,用来以一个对象为基础创建另一个对象,新建的对象的__proto__指向基础对象  var obj = {name:'maycpou',a ...

  3. hdu1698 区间更新

    初写线段树的时候,印象最深的一道,有一个pushdown的操作,使我的tle变成了ac 题意 输入t,然后t组数据 输入n,m,n代表n个点上价值全是1的绳子,m代表m次操作 m行l,r,val  就 ...

  4. LVS负载均衡软件使用及(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案, ...

  5. 07-华为RAID2.0+技术

    目录 07-华为RAID2.0+技术 参考 RAID2.0+原理 07-华为RAID2.0+技术

  6. 50道SQL练习题及答案与详细分析(MySQL)

    50道SQL练习题及答案与详细分析(MySQL) 网上的经典50到SQL题,经过一阵子的半抄带做,基于个人理解使用MySQL重新完成一遍,感觉个人比较喜欢用join,联合查询较少 希望与大家一起学习研 ...

  7. Python 中的类与对象 初认识

    一:类的声明 1类的关键字: 从第一天第一个项目起我们就接触过关键字,比如False True is not None return for while elif else import等等,这是语言 ...

  8. UIKit框架使用总结--看看你掌握了多少

    一.经常使用的,基本就是每次项目迭代都需要使用的 UIView.UILabel.UIImage.UIColor.UIFont.UIImageView.UITextField.UIButton. UIS ...

  9. Python 文件和目录操作学习

    文件与文件路径 文件有两个关键属性:文件名和路径. 路径指明了文件在计算机上的位置. 文件名中,最后一个句点之后的部分称为文件的"扩展名",它指出了文件的类型 目录也叫文件夹,文件 ...

  10. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:电脑程序输出: Sample output

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...