精华内容
下载资源
问答
  • 2021-04-26 22:02:18

    C++ 11标准之前(C++ 98/03 标准),如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构:

    for(表达式 1; 表达式 2; 表达式 3){
        //循环体
    }

    例如,下面程序演示了用上述结构遍历数组和容器的具体实现过程(实例一):

    #include <iostream>
    #include <vector>
    #include <string.h>
    using namespace std;
    
    int main() 
    {
        char arc[] = "http://c.biancheng.net/cplus/11/";
        int i;
        //for循环遍历普通数组
        for (i = 0; i < strlen(arc); i++) 
        {
            cout << arc[i];
        }
        cout << endl;
    
        vector<char>myvector(arc,arc+23);
        vector<char>::iterator iter;
        //for循环遍历 vector 容器
        for (iter = myvector.begin(); iter != myvector.end(); ++iter)
        {
            cout << *iter;
        }
        return 0;
    }
    
    //程序执行结果为:
    //http://c.biancheng.net/cplus/11/
    //http://c.biancheng.net/

    而 C++ 11 标准中,除了可以沿用前面介绍的用法外,还为 for 循环添加了一种全新的语法格式,如下所示:

    for (declaration : expression){
        //循环体
    }

    其中,两个参数各自的含义如下:

    • declaration:表示此处要定义一个变量,该变量的类型为要遍历序列中存储元素的类型。需要注意的是,C++ 11 标准中,declaration参数处定义的变量类型可以用 auto 关键字表示,该关键字可以使编译器自行推导该变量的数据类型。
    • expression:表示要遍历的序列,常见的可以为事先定义好的普通数组或者容器,还可以是用 {} 大括号初始化的序列。

    可以看到,同 C++ 98/03 中 for 循环的语法格式相比较,此格式并没有明确限定 for 循环的遍历范围,这是它们最大的区别,即旧格式的 for 循环可以指定循环的范围,而 C++11 标准增加的 for 循环,只会逐个遍历 expression 参数处指定序列中的每个元素。

    下面程序演示了如何用 C++ 11 标准中的 for 循环遍历实例一定义的 arc 数组和 myvector 容器:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        char arc[] = "http://c.biancheng.net/cplus/11/";
        //for循环遍历普通数组
        for (char ch : arc) 
        {
            cout << ch;
        }
        cout << '!' << endl;
    
        vector<char>myvector(arc, arc + 23);
        //for循环遍历 vector 容器
        for (auto ch : myvector) 
        {
            cout << ch;
        }
        cout << '!';
        return 0;
    }
    
    //程序执行结果为:
    //http://c.biancheng.net/cplus/11/ !
    //http://c.biancheng.net/!

    这里有以下 2 点需要说明:
    1) 程序中在遍历 myvector 容器时,定义了 auto 类型的 ch 变量,当编译器编译程序时,会通过 myvector 容器中存储的元素类型自动推导出 ch 为 char 类型。注意,这里的 ch 不是迭代器类型,而表示的是 myvector 容器中存储的每个元素。

    2) 仔细观察程序的输出结果,其中第一行输出的字符串和 "!" 之间还输出有一个空格,这是因为新格式的 for 循环在遍历字符串序列时,不只是遍历到最后一个字符,还会遍历位于该字符串末尾的 '\0'(字符串的结束标志)。之所以第二行输出的字符串和 "!" 之间没有空格,是因为 myvector 容器中没有存储 '\0'。

    除此之外,新语法格式的 for 循环还支持遍历用{ }大括号初始化的列表,比如:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        for (int num : {1, 2, 3, 4, 5}) 
        {
            cout << num << " ";
        }
        return 0;
    }
    
    //程序执行结果为:
    
    //1 2 3 4 5
    
    

    另外值得一提的是,在使用新语法格式的 for 循环遍历某个序列时,如果需要遍历的同时修改序列中元素的值,实现方案是在 declaration 参数处定义引用形式的变量。举个例子:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        char arc[] = "abcde";
        vector<char>myvector(arc, arc + 5);
        //for循环遍历并修改容器中各个字符的值
        for (auto &ch : myvector) 
        {
            ch++;
        }
        //for循环遍历输出容器中各个字符
        for (auto ch : myvector) 
        {
            cout << ch;
        }
        return 0;
    }
    
    //程序执行结果为:
    
    //bcdef

    此程序中先后使用了 2 个新语法格式的 for 循环,其中前者用于修改 myvector 容器中各个元素的值,后者用于输出修改后的 myvector 容器中的各个元素。

    那么declaration 参数既可以定义普通形式的变量,也可以定义引用形式的变量,应该如何选择呢?其实很简单,如果需要在遍历序列的过程中修改器内部元素的值,就必须定义引用形式的变量;反之,建议定义const &(常引用)形式的变量(避免了底层复制变量的过程,效率更高),也可以定义普通变量。

    更多相关内容
  • 满意答案聊城模型推荐于 2017.11.23采纳率:47%等级:9已帮助:1113人for循环语句如果循环体内只有一条执行语句则不用加大括号,如果执行语句为多条语句则必须用大括号括起来,以表示这一部分的执行语句都在循环体内...

    满意答案

    00e27ab806e4881f8254fe7ae8741834.png

    聊城模型

    推荐于 2017.11.23

    00e27ab806e4881f8254fe7ae8741834.png

    采纳率:47%    等级:9

    已帮助:1113人

    for循环语句如果循环体内只有一条执行语句则不用加大括号,如果执行语句为多条语句则必须用大括号括起来,以表示这一部分的执行语句都在循环体内,循环条件满足时要被执行的语句;如:

    (1)for(i=0;i<5;i++)

    s+=m[i];这个循环体内就一条执行语句 s+=m[i];故不用大括号;

    (2)

    for(i=0;i<5;i++)

    for(j=0;j<5;j++)

    {a[i][j]=m;

    m++;

    if(j<=i)

    printf("%3d",a[i][j]);

    }这个例题双重for循环,第一重循环for(i=0;i<5;i++)后没有大括号,因为他的循环体内只有一条执行语句就是内循环语句,它是一个复合语句:

    for(j=0;j<5;j++)

    {a[i][j]=m;

    m++;

    if(j<=i)

    printf("%3d",a[i][j]);

    }而内循环语句后有大括号,是因为内循环体内包括a[i][j]=m;和

    m++;和if(j<=i)

    printf("%3d",a[i][j]);三条执行语句,想把他们都包括到循环体内就必须用大括号括起来,作为一个复合语句出现。

    for语句还有空循环模式,就是没有执行语句,如:

    for(i=0;str[i]!='\0';i++);此句后就有分号,表示为空循环,没有执行语句,它的功能就是为了得到i的值。

    以上分析希望能够帮到您。

    180分享举报

    展开全文
  • for()循环不带花括号应注意的地方

    千次阅读 2019-10-03 03:43:53
    先看一段代码(代码块不用... for (int i = 0; i < 3; i++) out.println("<h3>我的理想是上天<h3>"); String str = "上天啦上天啦"; out.print(str + "<br>"); out.println("哈哈"); ...

     先看一段代码(代码块不用{}括起)

      for (int i = 0; i < 3; i++) 

        out.println("<h3>我的理想是上天<h3>");

        String str = "上天啦上天啦";

        out.print(str + "<br>");

        out.println("哈哈");

    输出结果是:

      

     

     

      再看另一种情况(代码块用{}括起)

      

      for (int i = 0; i < 3; i++) {

        out.println("<h3>我的理想是上天<h3>");

        String str = "上天啦上天啦";

        out.print(str + "<br>");

        out.println("哈哈");

        }

    输出结果是:

     

     

    仔细看两种情况我们会发现代码内容是一样的,但是带不带花括号输出结果是不同的。

    按照官方介绍:for循环后如果只有一条执行语句可以省略大括号(但是如果for循环后面如果是变量定义,没有可执行语句就会报错),所谓的可执行语句就是有输出结果的语句

    一般建议养成良好的代码习惯,随时加上花括号,即使是只有一条执行语句不影响结果,如果没有花括号也不变查看代码,影响后期维护

     

    转载于:https://www.cnblogs.com/lyd447113735/p/7679945.html

    展开全文
  • 基于范围for循环

    千次阅读 2021-01-31 18:20:29
    一、基于范围for循环(C++11) ...for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。 #include<iostream> using namespace std; void

    一、基于范围的for循环(C++11)

    1.范围for的语法

    2.范围for的使用条件

    二、指针空值nullptr

    一、基于范围的for循环(C++11)

    1.范围for的语法

    对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。
    因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围

    #include<iostream>
    using namespace std;
    void test()
    {
    	//范围for,当前的数据:循环范围
    	//也可以用continue结束本次循环,break跳出整个循环
    	//范围for的表示
        int arr[] = { 1,2,3,4,5 };
    	for (int e : arr)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    	//引用
    	for (const int& e : arr)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    	//auto关键字
    	for (const auto& e : arr)
    	{
    		cout << e << " ";
    	}
    
    	cout << endl;
    }
    int main()
    {
    	test();
    	return 0;
    }
    

    在这里插入图片描述

    2.范围for的使用条件

    for循环迭代的范围必须是确定的!

    //当数组作为函数参数时,数组名退化为指针,不能使用范围for
    void fun(int arr[], int n)
    {
    	for (const auto& e : arr)
    	{
    		cout << e << " ";
    	}
    	cout << endl;
    }
    

    二、指针空值nullptr

    //NULL指针
    int* p=NULL;
    //NULL指针实际是一个宏,即define NULL=0
    

    在传统的C头文件(stddef.h)中,可以看到如下代码

    #ifndef NULL
    #ifdef __cplusplus
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    #endif
    

    可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,例如当我们定义一个f(int*)函数时。

    #include<iostream>
    using namespace std;
    void fun(int a)
    {
    	cout << "fun(int)" << endl;
    }
    void fun(int* a)
    {
    	cout << "fun(int*)" << endl;
    }
    void test()
    {
    	fun(NULL);
    	fun((int*)NULL);
    	fun(nullptr);
    	//查看nullptr的变量类型
    	cout << typeid(nullptr).name() << endl;
    }
    int main()
    {
    	test();
    	return 0;
    }
    

    在这里插入图片描述当传入的参数为NULL时,调用的是fun(int)函数而不是fun(int*)函数,因为NULL被定义为0,要想调用fun(int*)需要进行类型转换(int*)NULL。这时可以用nullptr指针空值,从上述结果可以看到调用的是fun(int*)函数,指针类型为nullptr_t。
    注意

    1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。
    2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
    3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
    展开全文
  • C++ 11 范围for循环

    千次阅读 2019-04-15 03:01:50
    简介: 在C++98中,如果要遍历一个数组采取 for (int i = 0; i <...因此C++11中引入了基于范围for循环,十分方便并且需要担心数组越界等问题。 for循环后的括号由冒号“ :”分为两部分:...
  • while循环体花括号的作用

    千次阅读 2020-02-17 22:52:56
    用花括号括起来是为了让编译器知道while循环循环范围。 1、如果没有花括号,编译器就会认为while的循环体只有紧接着while语句的一行。 #include<iostream> using namespace std; int main() { int a=5; ...
  • 范围for 1.auto关键字 1.auto关键字(自动类型推导) 在C++11中auto有了全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得 1.举几个...
  • 增强for循环

    千次阅读 2021-05-23 20:21:23
    增强for循环一、什么是增强for循环?二、使用步骤1.引入库2.读入数据总结 一、什么是增强for循环? 增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合。其内部原理是一个...
  • Java for循环详解

    千次阅读 2021-03-14 21:51:03
    for 语句是应用最广泛、功能最强的一种循环语句。大部分情况下,for 循环可以代替 while 循环、do while 循环for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假,那么...
  • 理解 Python 的 for 循环

    千次阅读 2020-12-08 17:12:02
    在本篇博客中,我们将讨论 Python 中 for 循环的原理。我们将从一组基本例子和它的语法开始,还将讨论与 for 循环关联的 else 代码块的用处。然后我们将介绍迭代对象、迭代器和迭代器协议,还会学习如何创建自己的...
  • linux命令:for循环

    千次阅读 2021-05-12 17:21:07
    for循环:进行循环操作,for循环语句1.命令格式:第一种格式:for变量 in 列表; do循环体doneUsage: for I in {1..100}; dolet SUM+=$idoneecho "$SUM"第二种格式:for ((变量=初始值 ; 变量范围 ; 变量变化方式));...
  • python用for循环求和的方法总结

    千次阅读 2021-01-11 22:17:25
    python用for循环求和的方法总结Python中可以使用for循环实现累加求和for循环语法:for 变量 in range(x):循环需要执行的代码如下实现1到n求和:def main():sum = 0 # 定义变量做累加器n = int(input('n=')) #从键盘...
  • 关于增强for循环的用法

    万次阅读 多人点赞 2016-12-02 12:50:07
    一、增强for循环增强for循环的作用: 简化迭代器的书写格式。...增强for循环的缺点:增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如
  • 你真的会python中的for循环

    千次阅读 2022-04-16 14:09:01
    for 通常比 while 循环更容易编码并且运行效率更高,当需要遍历一个序列时,首先要考虑for循环。一般而言,当对象有特定的长 度时,可以使用 for 循环,没有时使用 while 循环。例如:使用 for 循环遍历目录中的文件...
  • Go基础之For循环

    万次阅读 2018-02-05 17:24:25
    package main import "fmt" ... fmt.Println("For_Simple:\n") For_Simple() fmt.Println("For_Ever:\n") For_Ever() fmt.Println("For_Break_One:\n") For_Break_One() fmt.Println("For_Break_
  • python-for循环-嵌套循环-函数

    千次阅读 2022-01-20 21:43:02
    for循环和可迭代对象遍历 for循环通常用于可迭代对象的遍历。for 循环的语法格式如下: for变量in 可迭代对象 : 循环体语句 [操作]遍历一个元组或列表 for x in (20,30,40): print(x*3) 可迭代对象 Python...
  • Shell循环语句详解--for循环

    千次阅读 2022-04-27 10:27:06
    文章目录一.for循环基本格式二.for循环脚本2.1测试主机状态2.2添加用户2.3乘法表三.总结 引言:在shell编程中,除了选择判断之外,对一些特殊情况需要进行循环操作,比如遍历目录文件,批量添加用户等操作,都需要...
  • Python中的For循环1.For循环语句1.Python for循环可以遍历任何序列类型,如一个列表或者一个字符串。如下代码应该能理解,依次输出序列元素。name = ["cdx", "red", "molly"]for i in...
  • for 循环作用域问题

    千次阅读 2017-11-17 15:16:31
    for 是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行代码的能力,for 语句对常用的循环模式做了一些简化,大部分的循环都具有特定的计数器变量,循环开始之前要初始化这个变量,然后...
  • MySQL实现for循环逐个遍历

    万次阅读 多人点赞 2019-06-14 00:14:24
    MySQL实现for循环逐个遍历背景预热代码效果补充 背景 起因是一个朋友问我怎么使用原生的sql实现将含有”广东省“、”广东“的字段去掉后面的”省“字,然后有了后面这段认识 预热 SQL:结构化查询语言,包括数据定义...
  • Java中循环有三种形式 while循环、do-while循环 和 for循环。其中从Java 6 开始for循环又分 普通for循环 和 for-each循环两种,我们接下来分别讲解。while 循环当条件为真时执行while循环,一直到条件为假时再退出...
  • for循环中的变量是局部变量还是全局变量?

    万次阅读 热门讨论 2019-08-25 20:39:08
    我表示很疑惑,在第一个for循环中明明为这些变量赋了值,结果在这里却能使用。 自己随即进行了查阅,也明白了问题所在: 在for/while等循环内部定义的变量属于局部变量,当for循环结束以后,局部变量就会被销毁...
  • 那些年python踩的坑-for循环

    万次阅读 2021-12-20 13:59:33
    python小白在for循环上踩的坑
  • for循环中抛出异常_不要抛出循环!

    千次阅读 2020-06-28 05:13:58
    例如,采用Scala的方法来控制诸如if , while和for构造。 尽管这些对您来说看起来像是老式的旧Java构造,但是Scala为它们赋予了一些截然不同的特性。 在让您犯了很多错误(并因此编写了错误的代码)之后,不要冒险...
  • C++11新特性之基本范围For循环(range-based-for)

    万次阅读 多人点赞 2017-01-07 13:49:35
    熟悉C++98/03的对于for循环就再了解不过了,如果我们要遍历一个数组,那么在C++98/03中的实现方式: int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i ; i++) cout 而遍历容器类的For如下: ...
  • JS关于for循环中变量作用域的问题

    千次阅读 2018-09-20 15:30:41
    js中作用域只有函数作用域和全局作用域,在函数体内使用var 定义的变量,会被提到函数开始处进行... 2 for(var i = 0;i&lt;10;i++){ 3 var q = i; 4 a[i]=function(){console.log(q)} 5 } 6 a[0]() 7 ...
  • 10. C语言 -- 循环结构:for 语句和嵌套循环

    万次阅读 多人点赞 2018-10-19 19:18:09
    本文主要讲述 C 语言循环结构中的 for 语句,介绍了表达式的省略、逗号表达式和在表达式中定义变量这三种灵活的使用方式,举例说明了循环嵌套的使用方式。
  • 理解 Python 中的 for 循环

    千次阅读 多人点赞 2019-07-06 10:20:36
    文中括号或者引用块中的 斜体字 为对应的英文原文或者我自己注释的话(会标明「译者注」),否则为原文中本来就有的话 文中的「我」均指原作者 Trey Hunner 目录保留英文原文 一些术语及特殊用语保留英...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,576
精华内容 39,030
关键字:

for循环不加括号的范围

友情链接: Cast.rar