我有一个小程序,可以模拟自动点唱机。
我有一个针对所有歌曲的课程,以及一个针对所有包含Song类的专辑的课程。

在此功能中,我将打印出专辑矢量中的所有歌曲,并使用迭代器为每首歌曲指定一个编号。 1.2.3.4。等

当我在第二个for循环中声明“ int i”时,则当然在每个专辑之后,int“ i”将再次变为0。但是,当我在所有For循环之前声明它时,我只会打印出第一张专辑。

怎么来的?

 void Jukebox::createList() {
    int i = 0;

    for (auto idx : albvec)
    {

        // Write out the songs
        for (i; i < idx.getNrSongs(); i++)
        {
            cout << i+1 << "  " << idx.getSongvec()[i].getArtist() << " - ";
            cout << idx.getSongvec()[i].getTitle() << " ";
            Time t = idx.getSongvec()[i].getDuration();
            printTime(t);
            cout << endl;
        }
    }

}

最佳答案

这是因为i与您的第一个for循环具有相同的作用域,因此它不会在您的第二个for循环开始时重新初始化。这意味着
 在第一个for循环完成后,您最终会得到i大于idx.getNrSongs()并且不再满足任何其他条件的情况。

int i = 0;

for (auto idx : albvec)
{

    // Write out the songs
    for (i; i < idx.getNrSongs(); i++)
    {
        cout << i+1 << "  " << idx.getSongvec()[i].getArtist() << " - ";
        cout << idx.getSongvec()[i].getTitle() << " ";
        Time t = idx.getSongvec()[i].getDuration();
        printTime(t);
        cout << endl;
    }
    // at this point, i is now greater than idx.getNrSongs().
    // since the scope of i is not local to the for loop, it's
    // value will be kept for the next for loop iteration! Meaning
    // if i ends at 5 for example on the first loop, it will start
    // with 5 on the second loop
}

关于c++ - 从For循环C++跳出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49518778/

10-13 05:29