C++ 循环与跳转语句

197 阅读3分钟

启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情

之前的编程过程当中,或多或少的使用过C++的循环语句,但是没有仔细的聊过,那么今天来深入聊聊C++的循环,当然,伴随着循环需要有一个循环的控制部分,也就是跳转语句。

for循环

在编程的过程当中,经常会遇到重复的情况,比如,展示vector当中的每个元素,比如输出10次hello word,这样的需求确实可以使用代码复制来完成,但是,考虑的代码的维护成本(也就是可维护性),使用循环来代替这样有规律的复制会比较好,那么就有了循环,而for循环就是其中的一种:

#include <iostream>
#include <string>using namespace std;
​
int main(){
​
    string hello = "hello word";
​
    int size = hello.size();
​
    for(int i; i < size; i++){
    
        cout << hello[i] << endl;
​
    } 
​
    return 0;
}
​

for循环的语句部分分为三个部分,声明语句,循环控制条件,表达式语句,其中:

声明语句代表的是循环需要的一个变量,比如上面案例当中的i;

循环控制条件是声明变量的变化范围,比如上面案例当中的i<size;

表达式是用来说明声明语句变量的变化情况,比如上面案例当中的i++;

所以上面的循环可以完整的描述成:声明一个变量i,在i小于size的前提先,自增,每次循环自增1,也可以描述为没执行一次循环,i自增1,所以在语句当中就可以直接使用i或为hello字符串的下标去取hello的元素了。

常规的for循环就是如此,但是也有要注意的地方:

1、当然,这里使用到了循环声明的变量i,实际上不适用i也是可以的,比如,就是想让代码重复执行10次,那么就可以直接在语句块当中填入要循环的语句,不需要调用循环声明的变量。

2、for循环比较适合已经知道循环次数的循环。

3、for循环语句部分的三个条件是可以省略或者写在其他部分的,不一定都写在括号里面,比如:

#include <iostream>
#include <string>using namespace std;
​
int main(){
​
    string hello = "hello word";
​
    int size = hello.size();
​
​
    for(int i; i < size;){
    
        cout << hello[i] << endl;
        i++;
    } 
​
    return 0;
}

4、for循环语句当中可以定义定义多个变量,但是只能由一个表达式,所以变量的类型是需要一致的。

.....
    for(int i,j; i < size;){
    
        cout << hello[i] << endl;
        i++;
    } 
.....

while循环

循环的过程当中,有时候是基于某个对象进行循环,那么系统是知道循环的次数的,比如上面循环展示一个字符串的元素,但是也有可能是不知道循环次数的,比如,判断一个文件目录的深度(从根目录到达只有文件,没有目录的次数),那么这个时候就没有一个具体的循环次数了,可能是1次也有可能是10次,所以这个时候就需要基于条件的判断了,while就可以出现了。

#include <iostream>
​
using namespace std;
​
int main(){
​
    int num = 0; 
​
    while(num < 10){
​
        cout << num << endl;
        ++num;
    }
​
    return 0;
}
​

相比较for循环while循环的写法更加简单,只有一个条件,如果条件满足(为真)就循环一次,然后再次判断,知道条件为假停止执行。

do while循环

在while的基础上,c++退出了do while语句,所谓的do while和while的区别是,先执行,再判断,而while语句是先判断,再执行,也就是说do while语句至少会执行1次,格式如下:

#include <iostream>
#include <string>
​
using namespace std;
​
int main(){
​
    int num = 0; 
​
    do{
        cout << num << endl;
        num++;
    }while(num < 10);
​
​
    return 0;
}

同样,这里有一个点需要注意,就是do while语句是先执行do,再进行while当中的条件判断,所以如果声明变量的话,需要再do当中进行或者外部进行,放到while当中声明变量,然后do当中调用是会报错的。

跳转语句

上面说了很多的循环语句,但是在循环的过程当中是没有办法控制的,这个其实是一个很大的问题,比如从一个数组当中查找一个字符,如果找到就停止查找,不再像后面查找了,那么这个需求当中,如果不能在循环的过程当召控制循环的话就不太好实现了,c++通过跳转语句实现了对循环的控制。c++提供了4种跳转语句:

break

break 语句可终止执行最近的封闭循环或其所在条件语句。其实通俗的来说就是跳出上一层控制,最常见的就是在我们之前聊过的switch语句当中,当然在for和while语句当中也是可以使用的:

.....
    for(int i = 1; i < 10; i++){
        if(i%2 == 0){
            break
        }
        cont << "hello" << endl;
    } 
.....

这里当i取余2为0的时候(偶数),整个循环就会被break终止。

continue

相比较break语句,continue跳出的范围比较小,只是正对当次循环,比如上面的案例:

.....
    for(int i = 1; i < 10; i++){
        if(i%2 == 0){
            continue
        }
         cont << "hello" << endl;
    } 
.....

这里当i取余2为0的时候(偶数),整个循环不会停止,但是取余2的这次会停止,下面的输出hello就不会执行了,但是下次循环接着执行。

goto 与 return

这两个都和函数有关系,在循环当中使用并不多。我们聊函数的时候再具体聊,这里不做深入讲解。

循环嵌套

最后还是要聊聊嵌套,其实不论是判断还是循环,在工作场景下一般很难单独使用,通常会结合嵌套使用,这里就涉及到了一个执行顺序的问题,对于嵌套循环来说,一个关键的规律一定要把握好:外层循环执行一次,内层循环执行一遍,如果再复杂的话,就要关注内外层循环的变量的变化了,比如:

.....
    for(int i = 1; i < 10; i++){
        for(var j = 1; j < i;j++){
            count << j << endl;
        }
        cont << i << endl;
    } 
.....

那么在这里就是外层i=1的时候,j会循环一遍就是10次,j分别等于 1,2,3,4,5,6,7,8,9然后i = 2,再来一次,所以一个尝试就是,嵌套循环的时间复杂度至少是n方,这个捋清楚,然后再多写几个案例,嵌套循环的理解就没有问题了。

关于C++的循环和跳转语句就先聊这么多,还是请各位大佬多多指点。