加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c/c++ lambda 表达式使用实例分析

发布时间:2020-12-15 04:54:39 所属栏目:百科 来源:网络整理
导读:lambda 表达式 介绍 问题:假设有个需求是,在vector 找出所有长度大于等于4的元素。标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接受一个参数,这个参数是vector 里的元素。这时问题就来了,长度4无法作为参数传递, 肿么办??

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);

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读