C++11新特性(9)- 范围for语句

原创 2018年04月16日 20:26:40

C++的新风格


如果是10年前,C++语言也好,程序员也好,应该是相当自信的。但是近年来,各种新语言,新架构不断涌现,C++的地位虽然谈不上动摇,但是许多场合被人抢了风头也是事实。因此C++的代码风格也在发生改变。今天的范围for语句就算是一个例子。


功能介绍


循环最常见的的场景就是对数据集合的每一个元素进行某种操作。C++11之前,大致是这样的程序:

 

int a[] = {1, 2, 3, 4};

int sum = 0;

for(int i = 0 ; i < sizeof(a)/sizeof(a[0]); ++i){

        sum += a[i];



或者是这样


vector<int> v{1, 2, 3,4};

int sum = 0;

for(auto it = v.begin(); it != v.end(); it++){

    sum += *it;

}


可以看出,虽然目的只是对数据集合中的每个元素进行求和,还是要做如下几件事:

  1. 定义和初始化循环变量

  2. 判断循环条件

  3. 调整循环变量


C++程序员已经熟悉了这些过程,但还是麻烦了一些。大概是因为这个原因,C++11引入了范围for语句:


int array[]{1, 2, 3, 4};

int sum = 0;

 for(int a : array){

     sum += a;

}


vector<int> vect{1, 2, 3, 4};

int sum = 0;

for(int v: vect){

    sum += v;

}


for(int v : vect)读作“对于vect中的每一个v”。应该说,程序简练了不少。


运用条件


是不是所有地数据集合可以交给范围for遍历呢?答案是否定的。


数据v被范围for遍历的条件是,该数据支持v.begin()/v.end()或者是begin(v)/end(v)并返回一个迭代器。STL中的容器都满足上述条件。对于内置类型的数组来讲C++编译器提供了等同于上述接口的机制,因此也可以在范围for中使用。


作者观点


C++变得越来越不像C++了,不知道是好事还是坏事。


觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/craftsman1970/article/details/79965845

C++11 in Qt

本课程通过对C++11的初始化、类型推断、lambda等新特性的介绍和练习,引导大家快速认识并使用C++11来编程,同时介绍了Qt中对相应C++11特性的支持和应用,讲解在Qt编程中如何使用C++11。
  • 2016年04月01日 06:27

C++11新特性(9)- 范围for语句

C++的新风格如果是10年前,C++语言也好,程序员也好,应该是相当自信的。但是近年来,各种新语言,新架构不断涌现,C++的地位虽然谈不上动摇,但是许多场合被人抢了风头也是事实。因此C++的代码风格也...
  • craftsman1970
  • craftsman1970
  • 2018-04-16 20:26:40
  • 15

NIST随机性测试及参数范围

一 . 16种NIST随机性测试方法软件下载地址:点击打开链接1. 频率检验(Frequency  Test)        该检验主要是看0和1在整个序列中所占的比例。检验的目的是确定序列中的1和0...
  • lafu5137
  • lafu5137
  • 2018-03-17 18:23:28
  • 116

Linux查找某个大小范围内的文件

查找大小在某个范围内的文件使用-size参数,-size +n表示大于n单位的范围,-size –n表示小于n单位的范围。 查找大于100k且小于400k的文件 find . -type f -mti...
  • hongweigg
  • hongweigg
  • 2017-08-25 09:39:10
  • 272

随机森林(原理/样例实现/参数调优)

决策树 决策树与随机森林都属于机器学习中监督学习的范畴,主要用于分类问题。 决策树算法有这几种:ID3、C4.5、CART,基于决策树的算法有bagging、随机森林、GBDT等。 决策树是一种利...
  • y0367
  • y0367
  • 2016-05-25 21:24:36
  • 49127

坐标参数详解

坐标转换的相关问题(椭球体、投影、坐标系统、转换、BEIJING54、XIAN80等... 最近需要将一些数据进行转换,用到了一点坐标转换的知识,发现还来这么复杂^_^,觉得自己真是愧对了武汉大学以及...
  • CHENFEIYANG2009
  • CHENFEIYANG2009
  • 2010-11-09 11:37:00
  • 5270

LTE参数

编号 参数中文名称 参数英文名称 参数重要性 引用关系 功能类别 功能描述(参数功能原理简介) 所属网元 影响范围 数据类型(整数、实数、字符串等) 取值范围 单位 设备缺省值...
  • l_z_s_001
  • l_z_s_001
  • 2012-08-09 16:20:30
  • 16679

C++Primer第五版 6.2.6节练习

练习6.27:编写一个函数,它的参数是initializer_list 类型的对象,函数的功能是计算计算列表中所有元素的和。练习6.28:在error_msg函数的第二个版本中包含ErrCode类型...
  • fengzhanghao23
  • fengzhanghao23
  • 2015-09-15 10:46:46
  • 1256

自定义方法,参数取值超范围抛异常

/** * Compress a rectangle region in the YuvImage to a jpeg. * Only ImageFormat.NV21 and I...
  • iblade
  • iblade
  • 2017-06-01 13:47:12
  • 387

xgboost参数详解

XGBoost参数包括:general parameters,booster参数booster parameters和目标参数task parameters:General parameters:参数...
  • u013714645
  • u013714645
  • 2017-08-14 15:11:34
  • 207
收藏助手
不良信息举报
您举报文章:C++11新特性(9)- 范围for语句
举报原因:
原因补充:

(最多只允许输入30个字)