循环语句是编程语言中用来重复执行一段代码直到满足特定条件的一种控制结构。它们对于处理需要重复任务的场景非常有用,比如遍历数组、累加数值、重复执行某项操作直到满足条件等。
但是在使用循环语句的时候需要注意下哈,有时候一不小心会构成死循环或者屎山代码.
基础循环语句
在C++中,主要有三种基础循环语句,分别是for
、while
、do-while
:
- for循环:
for
循环是最常用的循环语句,它的一般形式为for (初始化表达式(比如:i = 1); 循环条件表达式(比如:i < 10); 循环后的操作表达式(i++)) { 循环体(比如:cout << i << endl;) }
,这里会在终端中从1打印到10.
通常用于执行固定次数的循环。
#include <iostream>
using namespace std; int main() { for (int i = 1; i <= 10; i++) {cout << i << endl;}
}
运行结果
- while循环:
while
循环的一般形式为while (循环条件表达式) { 循环体 }
。
它会在每次循环开始前检查条件表达式,如果条件为真,则执行循环体;否则退出循环。
这里打印一个小三角:
#include <iostream>
using namespace std; int main() { int n = 5; int i = 1; while (i <= n) { int j = 1; while (j <= n - i) { cout << " "; j++; } int k = 1; while (k <= 2 * i - 1) { cout << "*"; k++; } cout << endl; i++; } return 0;
}
- do-while循环:
do-while
循环的一般形式为do { 循环体 } while (循环条件表达式);
。
它至少执行一次循环体,然后在每次循环结束时检查条件表达式,如果条件为真,则继续循环;否则退出循环。
这里打印一个大三角:
#include <iostream>
using namespace std; int main() { int n = 9; int i = 1; do { int j = 1; do { cout << " "; j++; } while (j <= n - i); int k = 1; do { cout << "*"; k++; } while (k <= 2 * i - 1); cout << endl; i++; } while (i <= n); return 0;
}
其余方法
- goto语句:
尽管goto
不是专门用于循环的语句,但它可以被用来创建循环结构。goto
语句允许程序无条件地跳转到程序中指定的标签处。通过合理地设置标签和跳转条件,可以实现循环的效果。
#include <iostream>
using namespace std;int main() {int i = 0;
loop_start: // 定义一个标签if (i < 10) {cout << i << endl;i++;goto loop_start; // 跳转到标签,形成循环}return 0;
}
- 基于范围的
for
循环(得是C++11及以上版本):
一般语法为for (声明类型 变量名 : 容器名) { 循环体 }
,用于遍历容器(如std::vector
、std::array
、std::list
等)、数组或其他序列中的元素,无需使用索引或迭代器。#include <iostream> #include <vector> using namespace std;int main() {vector<int> numbers = {1, 2, 3, 4, 5};for (int num : numbers) {cout << num << " ";}// 输出: 1 2 3 4 5return 0; }
以上代码会在终端输出12345
-
std::for_each
方法:
std::for_each
是C++标准库算法中的一个函数模板,它接受一个迭代器范围和一个函数对象(或Lambda表达式),并对范围内的每个元素执行该函数对象。虽然不是循环语句,但可以用于遍历容器并执行特定操作,实现循环的效果。#include <iostream> #include <vector> #include <algorithm> using namespace std;void print(int i) {cout << i << " "; }int main() {vector<int> vec = {1, 2, 3, 4, 5};for_each(vec.begin(), vec.end(), print);// 输出: 1 2 3 4 5return 0; }
也是在终端输出
12345