0

0

C++循环结构实现 for while do while对比

P粉602998670

P粉602998670

发布时间:2025-08-26 08:26:01

|

996人浏览过

|

来源于php中文网

原创

C++提供for、while和do while三种循环结构,for适用于已知循环次数,while用于条件满足时重复执行,do while确保循环体至少执行一次;C++11引入基于范围的for循环简化容器遍历,C++17结合结构化绑定进一步提升代码简洁性与可读性。

c++循环结构实现 for while do while对比

C++提供了多种循环结构,

for
while
do while
,选择哪种取决于具体的需求和场景。
for
循环适合已知循环次数的情况,
while
循环适合在满足条件时重复执行,
do while
循环则保证循环体至少执行一次。

解决方案

循环结构是编程中不可或缺的一部分,用于重复执行一段代码,直到满足特定条件为止。C++提供了三种主要的循环结构:

for
循环、
while
循环和
do while
循环。理解它们的区别和适用场景对于编写高效且可维护的代码至关重要。

for
循环

立即学习C++免费学习笔记(深入)”;

for
循环通常用于已知循环次数的情况。它的语法结构如下:

for (初始化; 条件; 更新) {
  // 循环体
}
  • 初始化: 在循环开始前执行一次,通常用于初始化循环计数器。
  • 条件: 在每次循环迭代之前进行评估。如果条件为真,则执行循环体;否则,循环终止。
  • 更新: 在每次循环迭代之后执行,通常用于更新循环计数器。

例如,以下代码使用

for
循环打印数字0到9:

#include <iostream>

int main() {
  for (int i = 0; i < 10; ++i) {
    std::cout << i << " ";
  }
  std::cout << std::endl;
  return 0;
}

for
循环的灵活性在于,初始化、条件和更新部分都可以省略,但分号必须保留。例如,可以创建一个无限循环:

for (;;) {
  // 无限循环体
}

或者将初始化和更新操作放在循环体内部,但这种做法可能会降低代码的可读性。

while
循环

while
循环用于在满足条件时重复执行一段代码。它的语法结构如下:

while (条件) {
  // 循环体
}
  • 条件: 在每次循环迭代之前进行评估。如果条件为真,则执行循环体;否则,循环终止。

例如,以下代码使用

while
循环打印数字0到9:

#include <iostream>

int main() {
  int i = 0;
  while (i < 10) {
    std::cout << i << " ";
    ++i;
  }
  std::cout << std::endl;
  return 0;
}

for
循环相比,
while
循环更适合于循环次数未知的情况,例如从用户读取输入直到输入特定值。

do while
循环

do while
循环与
while
循环类似,但它保证循环体至少执行一次。它的语法结构如下:

do {
  // 循环体
} while (条件);
  • 循环体: 先执行循环体,然后再评估条件。
  • 条件: 在每次循环迭代之后进行评估。如果条件为真,则继续执行循环体;否则,循环终止。

例如,以下代码使用

do while
循环打印数字0到9:

#include <iostream>

int main() {
  int i = 0;
  do {
    std::cout << i << " ";
    ++i;
  } while (i < 10);
  std::cout << std::endl;
  return 0;
}

do while
循环适用于需要在循环开始前执行某些操作,并且至少需要执行一次循环体的情况。一个常见的例子是从用户读取输入,即使输入无效,也需要至少提示用户一次。

for
while
do while
循环的对比

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载
特性 @@######@@ 循环 @@######@@ 循环 @@######@@ 循环
适用场景 已知循环次数 循环次数未知 循环体至少执行一次
循环条件 在循环开始前评估 在循环开始前评估 在循环结束后评估
循环体执行 条件为真时执行 条件为真时执行 先执行一次,然后条件为真时继续执行
灵活性 初始化、条件和更新部分都可以省略,但分号保留 相对简单,更侧重于条件判断 保证循环体至少执行一次,更适合特定场景

如何选择合适的循环结构?

选择哪种循环结构取决于具体的需求。

  • 如果已知循环次数,则使用
    for
    循环。
  • 如果循环次数未知,并且需要在循环开始前评估条件,则使用
    while
    循环。
  • 如果需要保证循环体至少执行一次,则使用
    do while
    循环。

实际上,这三种循环结构在功能上是等价的,任何一种循环都可以用其他两种循环来实现。选择哪种循环结构主要取决于代码的可读性和简洁性。

副标题1

C++循环中

for
while
语句有什么作用?如何正确使用它们?

do while
break
语句用于控制循环的执行流程。
continue
语句用于立即终止循环,而
break
语句用于跳过当前循环迭代的剩余部分,并开始下一次迭代。

  • continue
    语句:
    当在循环体内部遇到
    break
    语句时,循环立即终止,程序控制转移到循环之后的语句。例如:
continue
  • break
    语句:
    当在循环体内部遇到
    break
    语句时,当前循环迭代的剩余部分被跳过,程序控制转移到循环的下一次迭代。例如:
#include <iostream>

int main() {
  for (int i = 0; i < 10; ++i) {
    if (i == 5) {
      break; // 当 i 等于 5 时,终止循环
    }
    std::cout << i << " ";
  }
  std::cout << std::endl; // 输出 0 1 2 3 4
  return 0;
}

正确使用

continue
continue
语句可以使代码更简洁、更易读。但是,过度使用它们可能会导致代码逻辑混乱,降低可维护性。应该谨慎使用它们,并确保代码的意图清晰明了。

副标题2

如何避免C++循环中的死循环?常见的死循环原因有哪些?

死循环是指循环条件始终为真,导致循环无限执行,程序无法正常结束。避免死循环是编写健壮代码的重要一环。

常见的死循环原因包括:

  1. 循环条件永真: 循环条件始终为真,例如
    #include <iostream>
    
    int main() {
      for (int i = 0; i < 10; ++i) {
        if (i == 5) {
          continue; // 当 i 等于 5 时,跳过本次迭代
        }
        std::cout << i << " ";
      }
      std::cout << std::endl; // 输出 0 1 2 3 4 6 7 8 9
      return 0;
    }
    break
  2. 循环变量更新错误: 循环变量没有正确更新,导致循环条件始终满足。例如:
continue
  1. 浮点数比较: 使用浮点数作为循环变量,并进行相等性比较,由于浮点数的精度问题,可能导致循环无法正常结束。例如:
while (true)

为了避免死循环,应该:

  • 仔细检查循环条件,确保它最终会变为假。
  • 确保循环变量在每次迭代中都得到正确更新。
  • 避免使用浮点数进行相等性比较。如果必须使用浮点数,可以使用一个小的容差值进行比较。例如:
for (;;)

副标题3

C++11及更高版本中,有哪些新的循环特性?它们如何简化代码?

C++11引入了基于范围的

#include <iostream>

int main() {
  int i = 0;
  while (i < 10) {
    std::cout << i << " ";
    // 忘记更新 i 的值,导致死循环
  }
  std::cout << std::endl;
  return 0;
}
循环(range-based for loop),也称为foreach循环,它极大地简化了遍历容器(例如数组、向量等)的代码。

基于范围的

#include <iostream>

int main() {
  float i = 0.0f;
  while (i != 1.0f) {
    std::cout << i << " ";
    i += 0.1f; // 浮点数精度问题可能导致 i 永远不等于 1.0f
  }
  std::cout << std::endl;
  return 0;
}
循环的语法结构如下:

#include <iostream>
#include <cmath>

int main() {
  float i = 0.0f;
  while (std::abs(i - 1.0f) > 1e-6) { // 使用容差值进行比较
    std::cout << i << " ";
    i += 0.1f;
  }
  std::cout << std::endl;
  return 0;
}
  • 声明: 声明一个变量,用于存储范围中的每个元素。
  • 范围: 要遍历的容器。

例如,以下代码使用基于范围的

for
循环打印向量中的所有元素:

for

与传统的

for (声明 : 范围) {
  // 循环体
}
循环相比,基于范围的
for
循环更加简洁易懂,避免了手动管理循环计数器和索引的麻烦。它还可以自动推断元素的类型,进一步简化代码。

此外,C++17引入了结构化绑定(structured binding),可以与基于范围的

#include <iostream>
#include <vector>

int main() {
  std::vector<int> numbers = {1, 2, 3, 4, 5};
  for (int number : numbers) {
    std::cout << number << " ";
  }
  std::cout << std::endl; // 输出 1 2 3 4 5
  return 0;
}
循环结合使用,方便地遍历
for
for
等结构。例如:

for

这些新的循环特性使得C++代码更加简洁、易读、易维护。它们是现代C++编程的重要组成部分。

std::pair
std::tuple
#include <iostream>
#include <map>

int main() {
  std::map<std::string, int> ages = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
  for (const auto& [name, age] : ages) {
    std::cout << name << " is " << age << " years old." << std::endl;
  }
  return 0;
}

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.09.25

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

什么是低代码
什么是低代码

低代码是一种软件开发方法,使用预构建的组件可快速构建应用程序,无需大量编程。想了解更多低代码的相关内容,可以阅读本专题下面的文章。

300

2024.05.21

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号