我有一个小程序,可以模拟自动点唱机。
我有一个针对所有歌曲的课程,以及一个针对所有包含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/