分享
三行代码  ›  专栏  ›  技术社区  ›  Hudie

试图理解如何在C++中使用基于循环的范围(复制) - Trying to understand how range-based for loops work in C++ [duplicate]

  •  0
  • Hudie  · 技术社区  · 1 周前

    我有一个程序,它从一个输入文件中读取矩阵中未知数量的整数,并将它们放入一个二维向量中。一旦在二维向量中有了这些整数,我将把每个与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循环,使用stringstream获取文件的值,然后将主向量vmain中的每个行向量“vr”向后推。

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

    1 回复  |  直到 1 周前
        1
  •  -3
  •   BTables    1 周前

    STD:载体实际上拥有3样东西 除了 实际存储的数据。1)指向矢量开头的指针。2)指向矢量末端的指针。3)向量的大小。

    因此,你的循环“知道”循环多少次。它(几乎)相当于说

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

    甚至

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