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

时间: 2024-10-26 10:32:54

C++11,使简单的事情简单的相关文章

【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 二.同步代码存在的问题 对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一个很严重的问题,例如我们向一个Web服务器发出一个

JustOj 1974: 简单的事情 (组合数)

题目描述 数学天才fans曾经说过一句话:组合数的计算是一件非常简单的事情.组合数的计算真的是一件非常简单的事情吗?请你自己去尝试一下吧! 输入 输入中的一些整数对n,m(m≤n≤20) 输出 输出其组合数. 样例输入 5 2 18 13 样例输出 10 8568 题解:组合数 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #in

新上线的网站想要获得排名没有什么捷径,简单的事情重复做

1.查看网站快照情况 对于交换链接,我们首先要看的就是网站要有快照,不管网站快照慢还是快照隔天的,但是第一条肯定是网站要有快照,最好是当天,次之隔天,最差3天内,超过一周的基本不考虑. 2.考虑PR值和PR输出值 对于这点,出站链接最好少于30,最高不超过50,也许很多人说谷歌PR已经退出中国市场了,那么为什么我们还需要看网站的PR值呢?虽然说谷歌PR曾经退出过,但是谷歌官方后来还是承认谷歌PR的存在,所以网站的PR值是交换友链的标准之一,不一定都要比自己高的,只要相当就可以了,当然,能换到PR

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定 springmvc学习笔记11-springmvc注解开发之简单参数绑定 spring参数绑定过程 默认支持的类型 简单类型 pojo绑定 自定义参数绑定实现日期类型绑定 springmvc和struts2的区别 本文主要介绍注解开发的简单参数绑定,包括简单类型.简单pojo以及自定义绑定实现类型转换 spring参数绑定过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到contro

2015年最好的员工心态培养 -- 我们需要把简单的事情做到极致

回答两个问题 1.你怎么对自己管理?你的自我管理体系形成了吗?包括了什么? 2.这十年来觉得最成功的事情是什么,为什么觉得最成功?成功的秘诀是什么? 你对今天的结果满意吗? -------------------------------------------------------------------------------------- 你的心理状态 两句话你认同哪句? 1.我连简单的事情做得都比牛人差 2.我之所以比牛人差因为我没有将很难的事做好 -------------------

复杂的事情简单做,简单的事情重复做,重复的事情用心做!

人们常说“复杂的事情简单做,简单的事情重复做,重复的事情用心做!”,其中真正的内涵是什么呢? 所有事情想完成都是复杂的,复杂的事情简单做,只有将步骤简单化,理出脉络,才能着手去做.多数时候我们都把简单当简化来做了,而简单并非简化,简单是每一步骤都要清晰做到位,简化则是是几个步骤合并去做,省略了本该有的过程,事情往往就是毁在了简化上.重复并非复制.简单的事情重复做,就是要我们要看清楚自己在这里面能重复的是什么?在重复的过程中,进度快了是因为自己的能力提升了?还是简化了步骤?而复制是按原来的模子一模

css,世界上没有绝对简单的事情

引文 自从学了前端的基础,自认为是没什么css是能难倒我的,可是事实是,世界上没有绝对简单的事情,实际上还有好多的东西等待我们去发掘. 详解 1.有些浏览器不完全支持css3,现在可以用 modernizr 工具去检测浏览器是否支持,以及支持哪些项. 2.除了内联元素和块级元素,还有几个标签的默认display并不是block/inline,下面举几个栗子: table { display:table } input { display:inline-block } textarea {  }

ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 配置 EF 框架服务 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF 框架服务 上一章节中我们了解了 Entity Framework 的基本工作原理和 DbContext ,我们也创建了一个自己的 HelloWorldDBContext. 本章节我们就来讲讲如何设置我们的 EF 框架来链接到 SQLite 数据库 配置 EF 框架服务 要让我们的 EF 框架的 DBContext 能够运行起来,我们需要更改一

ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 视图 花了几章节,终于把 ASP.NET Core MVC 中的 C 控制器涉及的七七八八了,本章节我们来学习下 V,也就是视图部分. ASP.NET Core MVC 应用程序中,没有任何内容像页面,并且在 URL 中指定路径时, 它也不包含与页面直接对应的任何内容. ASP.NET Core MVC 应用程序中最接近页面的东西被称为视图 是不是很拗口,哈哈,页面就是