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

就地定义匿名函数,不再需要定义函数对象,大大简化了标准库算法的调用。比如,在C++11之前,我们要调用for_each函数将vector中的偶数打印出来,如代码清单1-24所示。

代码清单1-24 lambda表达式代替函数对象的示例

class CountEven
{
   int& count_;

public:
   CountEven(int& count)
      : count_(count)
   {}

   void operator()(int val)
   {
      if (!(val & 1)) // val % 2 == 0
      {
         ++ count_;
      }
   }
};

std::vector<int> v = { 1, 2, 3, 4, 5, 6 };
int even_count = 0;
for_each(v.begin(), v.end(), CountEven(even_count));
std::cout << "The number of even is " << even_count << std::endl;

这样写既烦琐又容易出错。有了lambda表达式以后,我们可以使用真正的闭包概念来替换掉这里的仿函数,代码如下:

std::vector<int> v = { 1, 2, 3, 4, 5, 6 };
int even_count = 0;
for_each(v.begin(), v.end(), [&even_count](int val)
{
   if (!(val & 1)) // val % 2 == 0
   {
      ++ even_count;
   }
});
std::cout << "The number of even is " << even_count << std::endl;

lambda表达式的价值在于,就地封装短小的功能闭包,可以极其方便地表达出我们希望执行的具体操作,并让上下文结合得更加紧密。

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

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