C++ 中的 continue 語句
Jinku Hu
2023年10月12日
本文將解釋如何在 C++ 中使用 continue
語句。
使用 continue
語句跳過迴圈體的剩餘部分
continue
語句與迭代語句結合使用來操縱依賴於迴圈的塊執行。即,一旦在迴圈中到達 continue
語句,則跳過以下語句,並且控制移動到條件評估步驟。如果條件為真,則迴圈照常從新的迭代週期開始。
請注意,continue
只能包含在至少由以下迴圈語句之一包圍的程式碼塊中:for
、while
、do...while
或基於範圍的 for
。假設我們有多個巢狀迴圈,並且 continue
語句包含在內部迴圈中。跳過行為僅影響內部迴圈,而外部迴圈的行為與往常一樣。
在下面的示例中,我們演示了兩個 for
迴圈,其中的內部迴圈遍歷字串的 vector
。請注意,在迴圈體的開頭指定了 continue
語句,它主要控制是否執行以下語句。因此,帶有 rtop
和 ntop
的字串值不會顯示在輸出中,並且外迴圈執行其所有迴圈。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
for (int i = 0; i < 3; i++) {
for (const auto &it : vec) {
if (it == "rtop" || it == "ntop") continue;
cout << it << ", ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
輸出:
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
或者,我們可以使用 goto
語句而不是 continue
來實現與前面程式碼片段相同的行為。請記住,goto
作為無條件跳轉到程式中的給定行,不應用於跳過變數初始化語句。在這種情況下,空語句可以用 END
標籤標記,以便 goto
將執行移動到給定點。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
for (int i = 0; i < 3; i++) {
for (const auto &it : vec) {
if (it == "rtop" || it == "ntop") goto END;
cout << it << ", ";
END:;
}
cout << endl;
}
return EXIT_SUCCESS;
}
continue
語句可以被一些編碼指南視為不好的做法,使程式碼更難閱讀。同樣的建議經常被給予過度使用 goto
語句。儘管如此,當給定的問題可以內化可讀性成本並使用這些語句提供更容易的實現時,可以使用這些結構。下一個程式碼示例顯示了 while
迴圈中 continue
語句的基本用法。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
vector<string> vec = {"ntop", "mtop", "htop", "ktop",
"rtop", "ltop", "ftop", "atop"};
while (!vec.empty()) {
if (vec.back() == "atop") {
vec.pop_back();
continue;
}
cout << vec.back() << ", ";
vec.pop_back();
}
cout << "\nsize = " << vec.size() << endl;
return EXIT_SUCCESS;
}
輸出:
ftop, ltop, rtop, ktop, htop, mtop, ntop,
size = 0
作者: Jinku Hu