设为首页 加入收藏

TOP

C++11,使简单的事情简单
2015-11-21 01:04:18 来源: 作者: 【 】 浏览:1
Tags:简单 事情

Joe Armstrong说过一句话:

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个拿着香蕉的大猩猩,和整个丛林。

显然地,这将简单问题复杂化了。我们不否认这个世界上,有些代码是不能简单化的。对于那些可以简单化的代码,我们还是希望不要复杂化。如果你是这样的人,没有理由不使用C++11。下面将展示C++11是如何奇迹般地使代码简单化的。

假设有下面一段代码,用于判断容器内是否存在符合我们要求的字符串:

vector
   
    ::const_iterator cit = vs.cbegin(); for (; cit != vs.end(); ++cit) { if (lookForParttern(*cit)) return true; } return false; 
   

对于C++11之前, 这段代码在普通不过了。有了C++11,我们很容易写出下面这样的代码:

for (auto cit = vs.cbegin(); cit != vs.end(); ++cit) {
    if (lookForParttern(*cit))
        return true;
}
return false;

for里面的东西还是放进来比较好,这代码比起之前那段,看起来优雅些了。C++有个range-for,因此我们还可以这样写:

for (auto& x : vs) {
    if (lookForParttern(x))
        return true;
}
return false;

发现简洁了不少。这还不够,我们还可以使用算法,使代码更简洁:

return find_if(cbegin(vs), cend(vs), lookForParttern) != cend(vs);

很好,变成一行代码了。老实说,cbegin,cend写多了也很烦。我们使用range算法可以消除它:

return find_if(vs, lookForParttern) != cend(vs);

和第一段代码比起来,不仅代码短了很多,可读性也有过之而无不及。C++11在不减少运行效率的情况下,大大提升了生产率。可以把Java,C#扔一边了。

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU2647 Reward(拓扑排序)反向.. 下一篇poj 2299 Ultra-QuickSort(树状..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: