试图了解基于范围的 for 循环在 C++ 中的工作原理

Trying to understand how range-based for loops work in C++

我有一个程序可以从输入文件中读取矩阵中未知数量的整数并将它们放入二维向量中。一旦我将这些整数放入 2D 向量中,我将输出到另一个文件,每个整数都匹配 ASCII 字符。我的问题是我能够找到一个打印出二维向量的工作双 for 循环,但我不确定 for 循环内的范围是如何工作的。

while(getline(in, row)){  
    int num;
    stringstream ss(row);
    vector<int> vR;
    while(ss >> num){
        vR.push_back(num);
    }
    vMain.push_back(vR);
}    

for(auto vR : vMain ){                          //<------Here
        for(auto num : vR){                     //<------Here
            if(num >= 0 && num <= 14){
                cout << " ";
                out << " ";
            }
            .
            .
            .
}

我创建了 while 循环以使用字符串流获取文件的值,然后将每个行向量 "vR" 推回主向量 "vMain"。

for 循环一次遍历向量一个值,然后输出相应的 ASCII 值,“:”基于范围的 for 循环到底是如何工作的?

std::vector 除了 实际存储的数据外,还 实际上包含 3 个东西。 1) 指向向量开始的指针。 2) 指向向量末尾的指针。 3)向量的大小。

因此,你的循环"know"循环了多少次。它(几乎)等同于说

for(auto i  = vMain.begin(); i != vMain.end(); i++)

甚至

for(auto i = 0; i < vMain.size(); i++)