读书频道 > 网站 > 网页设计 > 深入应用C++11:代码优化与工程级应用
1.6.3 在需要的时间和地点实现闭包,使程序更灵活
15-07-07    下载编辑
收藏    我要投稿   
在StackOverflow的最近一次世界性调查中,C++11在所有的编程语言中排名第二, C++11受到程序员的追捧是毫不意外的,因为它就像C++之父Bjarne Stroustrup说的:它看起来就像一门新的语言。C++11新增加了相当多的立即去当当网订购

在1.5.3节中使用了std::bind组合了多个函数,实现了计算集合中大于5小于10的元素个数的功能:

using std::placeholders::_1;

// 查找集合中大于5小于10的元素个数

auto f = std::bind(std::logical_and<bool>(),
                  std::bind(std::greater<int>(), _1, 5),
                  std::bind(std::less_equal<int>(), _1, 10));
int count = std::count_if(coll.begin(), coll.end(), f);

通过使用lambda表达式,可以轻松地实现类似的功能:

// 查找大于5小于10的元素的个数

int count = std::count_if(coll.begin(), coll.end(), [](int
x){return x > 5 && x < 10;});

可以看到,lambda表达式比std::bind的灵活性更好,也更为简洁。当然,这都得益于lambda表达式的特征,它可以任意封装出功能闭包,使得短小的逻辑可以以最简洁清晰的方式表达出来。

比如说,我们这时候的需求变更了,只希望查找大于10,或小于10的个数:

// 查找大于10的元素的个数

int count = std::count_if(coll.begin(), coll.end(), [](int
x){return x > 10;});

// 查找小于10的元素的个数

int count = std::count_if(coll.begin(), coll.end(), [](int
x){return x < 10;});

不论如何去写,使用lambda表达式的修改量是非常小的,清晰度也很好。

lambda和std::function的效果是一样的,代码还更简洁了。一般情况下可以直接用lambda来代替function,但还不能完全替代,因为还有些老的库,比如boost的一些库就不支持lambda,还需要function。

C++11引入函数式编程的概念中的lambda,让代码更简洁,更灵活,也更强大,并提高了开发效率,提高了可维护性。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站