cc++ lambda 表达式使用实例分析

cc++ lambda 表达式使用实例分析,第1张

概述本文章向大家介绍c/c++ lambda 表达式使用实例分析,需要的朋友可以参考一下

lambda 表达式 介绍

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

肿么办???

解决办法:使用lambda。

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

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

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

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

完美!!!

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

//删除重复的元素

voID delDups(vector &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 &words,

vector::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(),

[sz](const string &s){

return s.size() >= sz;

});

auto cnt = words.end() - IDx;

cout << cnt << " word's length >= " << sz << endl;

for_each(IDx,[](const string &s){

cout << s << " ";

});

cout << endl;

}

int main(){

//test1 自定义排序算法

/*

vector svec{"the","quick","red","fox","jumps",

"over","the","slow","turtle"};

delDups(svec);

//先按长度排序,长度相同的,再用字典顺序排序

stable_sort(svec.begin(),svec.end(),shorter);

for(const auto &s : svec){

cout << s << " ";

}

cout << endl;

*/

//test2 用lambda作为参数

vector svec{"the","turtle"};

bigger(svec,4);

}

总结

以上是内存溢出为你收集整理的c/c++ lambda 表达式使用实例分析全部内容,希望文章能够帮你解决c/c++ lambda 表达式使用实例分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存