C++ 中的 continue 语句

Jinku Hu 2023年10月12日
C++ 中的 continue 语句

本文将解释如何在 C++ 中使用 continue 语句。

使用 continue 语句跳过循环体的剩余部分

continue 语句与迭代语句结合使用来操纵依赖于循环的块执行。即,一旦在循环中到达 continue 语句,则跳过以下语句,并且控制移动到条件评估步骤。如果条件为真,则循环照常从新的迭代周期开始。

请注意,continue 只能包含在至少由以下循环语句之一包围的代码块中:forwhiledo...while 或基于范围的 for。假设我们有多个嵌套循环,并且 continue 语句包含在内部循环中。跳过行为仅影响内部循环,而外部循环的行为与往常一样。

在下面的示例中,我们演示了两个 for 循环,其中的内部循环遍历字符串的 vector。请注意,在循环体的开头指定了 continue 语句,它主要控制是否执行以下语句。因此,带有 rtopntop 的字符串值不会显示在输出中,并且外循环执行其所有循环。

#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
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Loop