当前位置: 首页 > news >正文

【关于for循环的几种写法】

关于for循环的几种写法

在 C++ 中,for(int i = 0; i < n; i++) 是一种常见的循环写法,用于遍历从 0n-1 的索引。如果你希望简化这种写法,可以使用以下几种方法:


1. 使用范围 for 循环

如果你需要遍历一个容器(如数组、vectorlist 等),可以使用 C++11 引入的范围 for 循环(range-based for loop)。

示例
std::vector<int> nums = {1, 2, 3, 4, 5};// 传统 for 循环
for (int i = 0; i < nums.size(); i++) {std::cout << nums[i] << " ";
}// 范围 for 循环
for (int num : nums) {std::cout << num << " ";
}
优点
  • 更简洁,不需要手动管理索引。
  • 适用于所有支持迭代器的容器。

2. 使用 std::for_each

如果你需要对容器中的每个元素执行某个操作,可以使用 std::for_each

示例
#include <algorithm>
#include <iostream>
#include <vector>std::vector<int> nums = {1, 2, 3, 4, 5};// 使用 std::for_each
std::for_each(nums.begin(), nums.end(), [](int num) {std::cout << num << " ";
});
优点
  • 函数式编程风格,代码更简洁。
  • 可以结合 lambda 表达式使用。

3. 使用 while 循环

如果你需要更灵活的控制循环条件,可以使用 while 循环。

示例
int i = 0;
while (i < n) {std::cout << i << " ";i++;
}
优点
  • 适用于复杂的循环条件。

4. 使用 do-while 循环

如果你希望循环至少执行一次,可以使用 do-while 循环。

示例
int i = 0;
do {std::cout << i << " ";i++;
} while (i < n);
优点
  • 适用于至少执行一次的场景。

5. 使用 auto 简化类型声明

如果你遍历的是容器,可以使用 auto 简化类型声明。

示例
std::vector<int> nums = {1, 2, 3, 4, 5};
for (auto num : nums) {std::cout << num << " ";
}
优点
  • 代码更简洁,不需要显式指定类型。

6. 使用 std::iota 生成索引

如果你需要生成从 0n-1 的索引,可以使用 std::iota

示例
#include <numeric>
#include <vector>
#include <iostream>int n = 5;
std::vector<int> indices(n);
std::iota(indices.begin(), indices.end(), 0); // 生成 0, 1, 2, 3, 4for (int i : indices) {std::cout << i << " ";
}
优点
  • 适用于需要生成索引的场景。

7. 使用 std::ranges(C++20)

如果你使用的是 C++20,可以使用 std::ranges 简化循环。

示例
#include <ranges>
#include <vector>
#include <iostream>std::vector<int> nums = {1, 2, 3, 4, 5};// 使用 std::ranges::for_each
std::ranges::for_each(nums, [](int num) {std::cout << num << " ";
});
优点
  • 更现代的写法,代码更简洁。

8. 总结

方法适用场景优点
范围 for 循环遍历容器简洁,不需要手动管理索引
std::for_each对容器中的每个元素执行操作函数式风格,结合 lambda 表达式
while 循环复杂循环条件灵活
do-while 循环至少执行一次适用于特定场景
auto 简化类型声明遍历容器代码更简洁
std::iota生成索引适用于需要生成索引的场景
std::rangesC++20 中的现代写法更简洁,更现代
  • 推荐方法:如果遍历容器,优先使用范围 for 循环或 std::for_each
http://www.lryc.cn/news/520029.html

相关文章:

  • Apache和PHP:构建动态网站的黄金组合
  • 免费开源的下载工具Xdown
  • Three.js 数学工具:构建精确3D世界的基石
  • 如何明智地提问
  • Microsoft Sql Server 2019 函数理解
  • 自定义日期转换配置
  • “AI智能服务平台系统,让生活更便捷、更智能
  • SQL美化器优化
  • 我的128天创作之路:回顾与展望
  • 内核配置参数整理
  • SpringBoot整合Easy-es
  • 于交错的路径间:分支结构与逻辑判断的思维协奏
  • Linux之读者写者模型与特殊锁的学习
  • 回溯专题 记录
  • 使用 Python 实现自动化办公(邮件、Excel)
  • 贪心算法笔记
  • Formality:两种等价状态consistency和equality
  • Java Web开发基础:HTML的深度解析与应用
  • 第30章 汇编语言--- 性能优化技巧
  • HTB:Paper[WriteUP]
  • 数据库中的 DDL、DML 和 DCL
  • OKR 极简史及理解
  • 电商项目-基于ElasticSearch实现商品搜索功能(四)
  • TCP封装数据帧
  • 数据结构与算法之二叉树: LeetCode 515. 在每个树行中找最大值 (Ts版)
  • 百度视频搜索架构演进
  • 构造函数的原型原型链
  • nginx反向代理及负载均衡
  • 单片机实物成品-011 火灾监测
  • 使用 Docker 在 Alpine Linux 下部署 Caddy 服务器