lambda 表达式 介绍

问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素。标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接受一个参数,这个参数是vector<string>里的元素。这时问题就来了,长度4无法作为参数传递,

肿么办???

解决办法:使用lambda。

lambda简单介绍:多了一个捕获列表的无名内联函数。

[capture list] (parameter list) -> return type { function body }

捕获列表,参数列表(可省略),返回值类型(可省略),函数体。

具体做法:把问题中的长度4作为捕获列表,把vector<string>里的元素作为参数列表,传递个lambda表达式,就解决了上述问题,

完美!!!

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
#include <list>
#include <deque>
#include <numeric>
#include <forward_list> using namespace std; //删除重复的元素
void delDups(vector<string> &svec){
sort(svec.begin(),svec.end());
auto end_u = unique(svec.begin(),svec.end());
svec.erase(end_u, svec.end());
}
//自定义的排序规则
bool shorter(const string s1, const string s2){
return s1.size() < s2.size();
}
//用lambda作为参数
void bigger(vector<string> &words,
vector<string>::size_type sz){
delDups(words);
//用lambda作为第三个参数
stable_sort(words.begin(), words.end(),
[](const string &s1, const string &s2){
return s1.size() < s2.size();
});
//把长度参数sz作为捕获列表,传递给lambda表达式
auto idx = find_if(words.begin(),words.end(),
[sz](const string &s){
return s.size() >= sz;
});
auto cnt = words.end() - idx;
cout << cnt << " word's length >= " << sz << endl;
for_each(idx, words.end(),[](const string &s){
cout << s << " ";
});
cout << endl;
}
int main(){
//test1 自定义排序算法
/*
vector<string> svec{"the","quick","red","fox","jumps",
"over", "the","slow","red","turtle"};
delDups(svec);
//先按长度排序,长度相同的,再用字典顺序排序
stable_sort(svec.begin(),svec.end(),shorter);
for(const auto &s : svec){
cout << s << " ";
}
cout << endl;
*/ //test2 用lambda作为参数
vector<string> svec{"the","quick","red","fox","jumps",
"over", "the","slow","red","turtle"};
bigger(svec, 4); }

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ lambda 表达式 介绍的更多相关文章

  1. Linq学习系列-----1.1 Lambda表达式介绍

     1.1  Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...

  2. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  3. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  4. Lambda表达式介绍

    Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符----------  =>,该运算符读为" ...

  5. Lambda表达式介绍(转)

    刚开始学lambda,lambda与linq的联合使用. Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符- ...

  6. Java 8 Lambda表达式介绍

    Lambda是什么? Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码.可以写出简洁.灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到提升. 可以这么说l ...

  7. JAVA 8 Lambda表达式-Lambda Expressions

    Lambda表达式介绍 Lambda表达式是在java规范提案JSR 335中定义的,Java 8 中引入了Lambda表达式,并被认为是Java 8最大的新特性,Lambda表达式促进了函数式编程, ...

  8. java8新增特性(一)---Lambda表达式

    Lambda表达式也成为闭包,是java语言层次上的改变,Lambda同意把函数作为一个方法的參数(函数作为參数传递进方法中),或者把代码看成数据.函数式程序猿对这一概念非常熟悉. 在JVM平台上有非 ...

  9. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

随机推荐

  1. 浅谈ASP.NET框架

       本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实 ...

  2. MySQL高可用之组复制技术(2):配置单主模型的组复制

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  3. SPI 方式初始化 SD 卡总流程图(V2.0)

  4. [转]USDT与omniCore钱包

    本文转自:http://www.cnblogs.com/red-evil/p/10039740.html USDTUSDT,又称为泰达币,是由Tether公司在 2015年推出的一种与美元锚定的加密货 ...

  5. [转]How to display the data read in DataReceived event handler of serialport

    本文转自:https://stackoverflow.com/questions/11590945/how-to-display-the-data-read-in-datareceived-event ...

  6. 第一册:lesson7-8.

    原文:Are you a teacher? A:I am a  new student ,my name is A. B:Nice to meet you,my name is B. A:Are yo ...

  7. .net core部署在iis上

    部署在Windows Server 2008 R2上,一直安装失败,网上找的资料一直无法解决问题,后来找到了官方的文档, 原来是要安装sp1,大概2g左右,同时也要安装Microsoft Visual ...

  8. asp.net-服务器控件-Label-20180329

    主要用于展示静态文本.可使用代码改变Label控件属性. Label常用属性 ID:控件名称 Text:显示的文本 Width:宽度设置 BackColor:背景颜色 BorderColor:边框颜色 ...

  9. Java IO(2)阻塞式输入输出(BIO)

    在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的I ...

  10. HTML琐碎知识点(持续补充)

    一.table标签 <table> <thead> <tr> <th>111</th> </tr> </thead> ...