C++ for 循环

for 循环允许您编写一个执行特定次数的循环的重复控制结构。

语法

C++ 中 for 循环的语法:

for ( init; condition; increment )
{
   statement(s);
}

下面是 for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

流程图

C++ 中的 for 循环

实例

实例

#include <iostream> using namespace std; int main () { // for 循环执行 for( int a = 10; a < 20; a = a + 1 ) { cout << "a 的值:" << a << endl; } return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

基于范围的for循环(C++11)

for 语句允许简单的范围迭代:

int my_array[5] = {1, 2, 3, 4, 5}; // 每个数组元素乘于 2 for (int &x : my_array) { x *= 2; cout << x << endl; } // auto 类型也是 C++11 新标准中的,用来自动获取变量的类型 for (auto &x : my_array) { x *= 2; cout << x << endl; }

上面for述句的第一部分定义被用来做范围迭代的变量,就像被声明在一般for循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。

实例

#include<iostream> #include<string> #include<cctype> using namespace std; int main() { string str("some string"); // range for 语句 for(auto &c : str) { c = toupper(c); } cout << str << endl; return 0; }

上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出结果为:

SOME STRING
C++ 中,`for` 循环是一种常用的控制结构,用于重复执行代码块。C++ 提供了多种 `for` 循环的用法,包括传统的基于计数器的循环、基于范围的循环、嵌套循环以及结合标准库函数的用法。 ### 传统 for 循环 传统 `for` 循环使用计数器来控制循环次数,适用于数组、容器以及需要明确索引的操作。 ```cpp for (int i = 0; i < 15; i++) { std::cout << i << std::endl; } ``` 该循环通过初始化变量 `i`,在每次迭代前检查条件 `i < 15`,并在每次迭代后递增 `i` 的值[^1]。 ### 基于范围的 for 循环C++11 及以后) C++11 引入了基于范围的 `for` 循环,简化了对数组或容器的遍历。 ```cpp int studentid[] = {10001, 10002, 10003, 10004, 10005}; for (int value : studentid) { std::cout << value << std::endl; } ``` 在这个例子中,`value` 是数组中当前元素的副本,不需要手动管理索引。`auto` 关键字也可以用于自动推导变量类型。 ```cpp for (auto value : studentid) { std::cout << value << std::endl; } ``` 这种写法不仅简洁,而且提高了代码的可读性和安全性[^2]。 ### 嵌套 for 循环 `for` 循环可以嵌套使用,适用于处理多维数组或多层结构。 ```cpp int studentId[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} }; for (int i = 0; i < 3; i++) { int count = 0; for (auto value : studentId[i]) { count++; std::cout << i + 1 << "班第" << count << "同学的学号是:" << value << std::endl; } } ``` 上述代码通过外层循环遍历班级,内层循环遍历每个班级的学生[^1]。 ### 使用迭代器的 for 循环 对于标准库容器,如 `std::vector` 或 `std::list`,可以使用迭代器进行遍历。 ```cpp #include <vector> std::vector<int> vecNum = {0, 1, 2, 3, 4, 5}; for (auto it = vecNum.begin(); it != vecNum.end(); ++it) { std::cout << *it << std::endl; } ``` 这种方式提供了对容器元素的直接访问,并且在操作容器时具有更高的灵活性[^5]。 ### 使用 std::for_each 的函数式写法(结合 Lambda 表达式) C++ 标准库提供了 `std::for_each` 算法,可以结合 Lambda 表达式使用。 ```cpp #include <algorithm> std::vector<int> vecNum = {0, 1, 2, 3, 4, 5}; std::for_each(vecNum.begin(), vecNum.end(), [](int item) { std::cout << item << std::endl; }); ``` 这种方式在处理容器时非常简洁,并且可以利用 Lambda 表达式实现内联逻辑[^5]。 ### foreach 宏(仅限 Microsoft 编译器) 某些编译器(如 Microsoft Visual C++)支持 `foreach` 语法,用于简化基于范围的遍历。 ```cpp CString strText; foreach (auto item in vecNum) { strText.Format("%d", item); AfxMessageBox(strText); } ``` 需要注意的是,`foreach` 并非标准 C++ 语法,仅适用于特定编译器环境[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值