lambda表达式和for_each,find_if
1 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的更多相关文章
- c/c++ lambda 表达式 介绍
lambda 表达式 介绍 问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素.标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接 ...
- 泛型2(lambda表达式/参数绑定)
lambda 表达式: Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-> return type { fu ...
- C++的匿名函数(lambda表达式)
总述 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...
- 定制操作(传递函数或lambda表达式)
很多算法都会比较输入序列中的元素.默认情况下,这类算法使用元素类型的<或==运算符完成比较.标准库还为这些算法定义了额外的版本,允许我们提供自己定义的操作来代替默认运算符. 例如,sort算法默 ...
- Lambda 表达式的示例-来源(MSDN)
本文演示如何在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述,请参阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的详细信息,请参阅 Lambda 表 ...
- Lambda 表达式的示例
本文中的过程演示如何使用 lambda 表达式. 有关 lambda 表达式的概述,请参见 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的更多信息,请参见 Lambda 表达式 ...
- STL之lambda表达式
一.简介 我们可以向一个算法传递任何类别的可调用对象.对于一个对象或一个表达式,如果可以对其使用调用运算符,则称它为可调用的.即,如果e是一个可调用的表达式,则我们可以编写代码e(args),其中ar ...
- Lambda 表达式的演示样例-来源(MSDN)
本文演示怎样在你的程序中使用 lambda 表达式. 有关 lambda 表达式的概述.请參阅 C++ 中的 Lambda 表达式. 有关 lambda 表达式结构的具体信息,请參阅 Lambda 表 ...
- C++ 理解函数对象与lambda表达式
参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...
随机推荐
- HYStockChart, 股票图(包括K线图、趋势图、成交量、滚动、放大缩小等)
HYStockChart, 股票图(包括K线图.趋势图.成交量.滚动.放大缩小等) https://www.helplib.com/GitHub/article_127980git 地址 http:/ ...
- 安卓开发:在Mac系统中搭建安卓开发环境
第一步:检查下自己的电脑上有没有安装JDK(Java Development Kit)(2019年7月安装的最新版是JDK 1.8.0_181版本),通过在终端中输入"java -versi ...
- java 日志的数据脱敏
思路 1.在 model层进行处理,直接重写get方法,在写一个getPlain 获取明文方法.(缺点:数据库写入和json序列化传递时使用的都是密文) 2.利用 日志组件过滤 特定的key,去进行脱 ...
- Jmeter在linux下的安装
Apache Jmeter简介 Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到 ...
- elasticsearch ik解析器
ik解析器 1. ik解析器 The IK Analysis plugin integrates Lucene IK analyzer (http://code.google.com/p/i ...
- Catalyst3560密码破解
1.关机:2.将设备MODE键按住,然后开机,进入switch:switch: flash_initInitializing Flash...flashfs[0]: 7 files, 2 direct ...
- 02-16Android学习进度报告十六
今天主要学习了GridView(网格视图)的基本使用和一些基本概念. 下面是GridView中的一些属性: android:columnWidth:设置列的宽度 android:gravity:组件对 ...
- Linux查看当前系统32位还是64位
getconf LONG_BIT 此方法会直接返回32或64
- linux-命令行快捷方式使用
CTRL+P 命令向上翻滚 CTRL+N 命令向下翻滚 CTRL+U 命令行中删除光标前面的所有字符 CTRL+D 命令行中删除光标后面的一个字符 CTRL+H 命令行中删除光标前面的一个字符 CT ...
- centos610最小安装之后 后续设置
1.网络配置 centos选择最小桌面(如果不用到类似Oracle需要用到桌面的软件,则操作系统安装最小化安装)安装之后 查看网络配置如下: 截图显示网络并未启用. 2.开启网络设置 cd /etc/ ...