计算机擅长一遍遍地执行类似的任务。C++提供了四种循环结构:while循环、do/while 循环、for循环和基于区间的for循环。
1.while 循环
只要条件表达式的求值结果为true,while循环就会重复执行一个代码块。例如,下面的代码会输出“This is silly.”5次:
int i = 0;
while (i < 5)
{
std::cout << "This is silly." << std::endl;
++i;
}
在循环中可使用break关键字立刻跳出循环并执行程序。关键字continue可用来返回到循环的顶部并对while表达式重新求值。这两种风格都不提倡使用,因为它们会使程序的执行产生无规则的跳转,应该慎用。唯一有必要使用break语句的环境就是在switch语句中。
2. do/while 循环
C++还有一个版本的while循环,叫做do/while 循环。其运行方式类似于while循环,但会首先执行代码,而判断是否需要执行的条件放在结尾处。如果想让代码块至少执行一次,并且根据某一条件确定是否执行多次,就可以使用这个循环版本。下面的代码尽管条件为false,仍会输出“This is silly.”一次。
int i = 100;
do{
std::cout << "This is silly." <<std::endl;
i++;
}while (i < 5)
3.for循环
for循环提供了另一种循环语法。任何for循环都可以转换为while循环,反之亦然。然而,for循环的语法一般更简便,因为可以看到循环的初始表达式、结束条件以及每次迭代结束后执行的语句。在下面的代码中,i 被初始化为0;只要 i 小于5,循环就会继续执行;每次迭代结束时,i 的值会增 1.这段代码的功能与while循环示例相同,但这段代码看起来更加清晰,因为在一行中显示了初始值、结束条件以及每次迭代结束后所执行的语句。
for( int i = 0; i < 5; ++i)
{
std::cout << "This is silly. " << std::endl;
}
4.基于区间的for 循环
基于区间的for循环(Range-Based for Loop)是第4种循环,这种循环允许方便地迭代容器中的元素。这种循环类型可以用于C风格的数组、初始化列表,也可以用于返回迭代器的begin()和end()函数的类型。例如std::array 和其他所有STL容器。
下面的示例首先定义了一个包含4个整数的数组,此后“基于区间的for循环”遍历数组中的每个元素,输出每个值。为了再迭代元素时不制作副本,应使用本章后面讨论的引用变量:
std::array<int, 4> arr = {1,2,3,4};
for (int i : arr)
{
std::cout << i <<std::endl;
}