zoukankan      html  css  js  c++  java
  • 初探c++11之for循环篇

    在很多语言中都有类似foreach之类的循环关键字。在C++11中,也添加了类似的语言特性。

    不过,这里首先说一句,在STL已经有类似的东西,std::for_each,感兴趣可以自己查一下,这里不赘述。

    首先,给出一个参考文档

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html

    其次,给出一个示例

    1 int array[5] = { 1, 2, 3, 4, 5 };
    2 for (int& x : array)
    3 x *= 2;

    这样我们可以看到它的大概用法。值得注意的是,这里的循环变量是一个引用,这样可以在循环过程中改变它的值。

    那么,接下来会有几个疑问。第一,这种for循环的标准形式是什么。第二,这个示例给出的是一个数组的例子。但是类似数组的,还有stl里面的那些容器,在那上面可以用这种表达形式吗?第三,这个示例中for循环中的array是一个数组,也就是是指针常量,那么如果这里array是一个指针变量可以吗?

    首先,对于第一个问题,它的标准形式如下

    for ( for-range-declaration : expression ) statement

    for-range-declaration:
         type-specifier-seq attribute-specifieropt declarator
    也就是说,for循环中冒号后面的一项是一个表达式。通过查阅前面给出的参考文档,这个表达式应该或者是一个数组,或者是一个拥有begin()和end()方法的对象。

    对于第二个问题,vector, list之类的stl容器都是可以的。只要是有begin()和end()方法的对象都可以。那么,这么说,我们自己写一个类,有begin()和end()方法都可以吗?当然,这里要求begin()和end()方法返回两个可以比较的对象,并且支持*,++和!=三种操作。

    到这里,我们应该写一些代码测试一下。可是,我这里现在只有visual studio 2010,而它有不支持这个特性……只能等回头建立个gcc的环境来测试了。

    对于第三个问题,答案是不可以的。如果这个参数是数组,则必须要知道它的大小。而一个指针变量是无法知道大小的。在参考文档中是这么写的,If _RangeTis an array of unknown size or an array of incomplete type, the program is ill-formed.

  • 相关阅读:
    Mysql(二)
    Mysql(一)
    JS图表插件(柱形图、饼状图、折线图)
    如何让Table中的第一列和第二列的值相乘然后赋值给第三列
    js生成验证码并验证
    IIS配置默认文档
    DropDownList如何添加一个空白的选项
    GridView如何合并同类项
    .NET后台如何获取前台HMTL控件的值
    Json数据报错
  • 原文地址:https://www.cnblogs.com/l00l/p/2337557.html
Copyright © 2011-2022 走看看