• 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’。

  • 相关阅读:
    项目交付过程中,进度失控的原因有哪些?
    电磁场与电磁波part1--矢量分析
    【uniapp】HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE
    这次把怎么做好一个PPT讲清-动画篇
    块格式化上下文 & 堆叠上下文
    PaddleOCR模型移植安卓
    神经网络的问题总结
    每天一道算法题(五)——判断一组数字是否连续,出现连续数字的时候以‘-’输出
    使用Pyarmor保护Python脚本不被反向工程
    【Python爬虫】安装requests库解决报错问题
  • 原文地址:https://blog.csdn.net/zss6666yi/article/details/132906966