• C++11 for循环(基于范围的循环)详解


    基本语法

    for (element_declaration : range) {
        // 循环体,使用 element_declaration 表示 range 中的每个元素
    }
    
    • 1
    • 2
    • 3
    • element_declaration:这是一个新的变量,用于表示range中的每个元素。在for循环的每次迭代中,element_declaration都将被设置为range中的下一个元素。

    • range:这是一个可迭代的数据结构,例如字符串、数组、向量等。for循环将遍历range中的每个元素。

    范围基于范围的for循环的工作原理

    • for循环首先初始化element_declaration为range的第一个元素。
    • 然后,它执行循环体,使用element_declaration表示当前元素。循环体可以对element_declaration进行操作,就像它是一个普通的变量一样。
    • 循环体执行完毕后,for循环会自动将element_declaration更新为range中的下一个元素。
    • 循环会一直执行,直到遍历完range中的所有元素。

    优点:是它更加简洁和易读,特别适用于需要遍历容器或集合中的元素的情况。它隐藏了迭代器和循环索引等细节,使代码更加清晰。

    代码实例

    #include 
    #include 
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    程序执行结果为:

    http://c.biancheng.net/cplus/11/ !
    http://c.biancheng.net/!
    
    • 1
    • 2

    这里有以下 2 点需要说明:

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

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

  • 相关阅读:
    C/C++高精度
    vue学习(4)多个vue项目的localstorage数据存储
    【Day_13 0509】参数解析
    Spark 离线开发框架设计与实现
    远程调用的问题,调用失败到底是什么的问题(语言-java)
    blender从视频中动作捕捉,绑定到人物模型
    Talk预告 | 牛津大学胡庆拥:大场景三维点云语义理解Ⅱ
    STM32--蓝牙
    Allegro如何查看器件的管脚号?
    博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)
  • 原文地址:https://blog.csdn.net/zss6666yi/article/details/132906966