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

基本语法

for (element_declaration : range) {
    // 循环体,使用 element_declaration 表示 range 中的每个元素
}
  • 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;
}

程序执行结果为:

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

你可能感兴趣的:(C++常见知识点,开发语言,C++11,基于范围的for循环)