C++11,使简单的事情简单

Joe Armstrong说过一句话:

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

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

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

vector<string>::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#扔一边了。


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值