当前位置: 首页 > 科技观察

EasyC++,C++中的For循环

时间:2023-03-12 16:36:33 科技观察

大家好,我是梁唐。这是EasyC++系列的第19篇,简单说说C++中的for循环。想要追求更好阅读体验的同学可以点击文末“阅读原文”访问github仓库。for循环在编程中,我们经常会遇到需要重复执行的步骤。如果想让计算机重复执行某些逻辑,就需要使用循环。在C++中,循环分为三种,分别是for循环、while循环和dowhile循环。其中前两个用的比较多,最后一个很少用。基本用法是求1+2+3+...+100的和,使用for循环实现:intret=0;inti;for(i=1;i<=100;i++){ret+=i;}其中i++表示自增运算,是i+=1的缩写,也可以写成++i。但是++i和i++不能完全混用,我们会在后面的内容中进行说明。根据C++Primer中的定义,for循环可以分为三部分。第一部分是初始化。在这个for循环中,我们将循环因子i初始化为1。第二部分是判断条件,即for循环的执行条件,在什么情况下需要执行循环。第三部分是更新周期因子。比如这个例子,我们当前的i加到ret之后,会加1成为下一个要累加的数。最后一部分是花括号中的执行体,也就是每次循环需要执行的内容。写成一般形式:for(initialization;test-expression;update-expression){body;}初始化、判断条件、更新因子三部分用分号隔开。如果循环要执行的内容只有一条语句,花括号也可以省略。但是,为了保证全局统一的代码风格,最好统一使用花括号。test-expression决定了循环是否结束,因此,在每个body开始执行之前,需要进行test-expression判断。当test-expression为真时,主体中的语句将被执行。test-expression不一定是bool值,C++会进行强制转换。比如对于int类型,0值会被转为false,其他值会被转为true。例如:intret=0;inti;for(i=100;i;i--){ret+=i;}这个逻辑和上面一样,也是计算1到100的累加值,只是这里我们是倒序相加,循环的执行条件是i>=0。当i=0时结束,我们的判断条件可以写成i。int类型的i将被转换为bool类型。当i=0时,值为false,循环结束。自减的用法与自增类似。高级用法首先,我们可以将循环因子的声明写入for循环中://version1inti;for(i=0;i<100;i++)ret+=i;//version2for(inti=0;i<100;i++)ret+=i;这有两个优点。一是简化代码,将i的声明语句写进for循环中,可读性更强。还有一点就是限制变量i的使用范围。for循环中声明的变量只具有for循环的作用域。循环后,变量i将消失。但是在一些老的编译器(如VC6.0)中就不是这样了,循环中声明的变量仍然会存在。此外,初始化;测试表达;update-expression不是必需的,可以根据需要省略。例如for循环所需要的初始化工作之前已经完成,那么可以省略初始化:inti=0;for(;i<100;i++)ret+=i;比如我们也可以把循环的结束条件放在for循环体中,比如:for(inti=0;;i++){if(i>100)break;ret+=i;}我们的更新条件也可以放在主体中:for(inti=0;i<100;){ret+=i;i++;}甚至,我们可以走极端,省略所有三个条件:inti=0;for(;;){if(i>100)break;ret+=i;i++;}同样,我们update的条件不一定只有自增或者自减,其他任何逻辑也是可以的。正因为如此,C++中的for循环非常灵活,使用得当可以完全替代while循环和dowhile循环。但是除非必要,还是要尽量遵守代码规范,不要遗漏条件,这样代码的可读性会更好。