C++11的lambda表达式怎么使用

这篇文章主要讲解了“C++11的lambda表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的lambda表达式怎么使用”吧!

为大城等地区用户提供了全套网页设计制作服务,及大城网站建设行业解决方案。主营业务为网站设计制作、成都做网站、大城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

可变lambda

假设有如下vector,保存的内容是学生的考试成绩:

vector score{45, 70, 56, 86, 28, 60, 90};

可以用以下代码来寻找第一个及格成绩:

find_if(score.begin(), score.end(),
        [](int v){return (v >=60);});

如果需要找到第n个及格成绩,很自然地会考虑使用下面的代码:

int counter = 2;
find_if(score.begin(), score.end(),
        [counter](int v){
           return (v >=60)&&(--counter == 0);
        });

但是很遗憾,这时会出现编译错误,告诉你counter是只读的。其原因是因为在lambda表达式中很少有需要修改捕获值的场景,因此默认捕获值具有const属性。如果出现本例这样,确实希望修改捕获值的情况,C++11使用mutable关键字来解决这个问题。来看完整代码:

int counter = 2;
auto iter find_if(score.begin(), score.end(),
       [counter](int v)mutable{
          return (v >=60)&&(--counter == 0);
       });
cout << *iter << endl;

当然了,由于是值捕获,处于lambda表达式外面的counter值依然不会改变。

如果希望连外面的counter一起修改,使用引用捕获即可。

感谢各位的阅读,以上就是“C++11的lambda表达式怎么使用”的内容了,经过本文的学习后,相信大家对C++11的lambda表达式怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


本文名称:C++11的lambda表达式怎么使用
网址分享:http://bzwzjz.com/article/pdihhc.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 重庆网站建设 网站制作 成都网站制作 成都网站制作 网站建设费用 高端网站设计 成都网站建设 成都企业网站设计 教育网站设计方案 成都品牌网站建设 成都网站设计 成都网站建设 高端网站设计 移动网站建设 四川成都网站建设 成都网站设计制作公司 泸州网站建设 成都网站制作 高端网站建设 网站建设改版 品牌网站建设 手机网站建设