C++循环

1. 概述

本篇文章主要讨论循环loops,当我们说循环时,通常指的是for循环和while循环。简单来说,循环是当我们写代码时,需要多次执行同样的操作时会用到的一种语法。因此,循环很简单。

例如,如果我们想打印"Hello World"5次,当然我们可以复制粘贴这些代码5次,或者将这些代码放入到一个函数中,然后调用这个函数5次。反正就是在代码中重复5次。这种情况下我们可以使用循环,可以让代码连续的运行5次。

循环在现实图片方面也是非常重要的。可以用来显示游戏,如果你写了一个游戏,你可能想让游戏继续下去,你不想运行游戏,渲染一帧然后退出,游戏一帧就结束了。其实你是希望游戏保持运行下去,要做到这点,我们需要的是游戏循环。当游戏在运行的时候,只要玩家还没有决定退出游戏,就需要对游戏状态更新,渲染游戏,让所有角色持续保持移动状态等,持续做一些事情,一遍又一遍,一帧接一帧。因此,循环是很重要的,他们被用在每一个程序中。

2. 案例

1. 准备项目

我们有一个简单的项目,项目中有三个文件,分别是Main.cpp,Log.h,Log.cpp。内容如下

2. 开始案例

如果我们想要打印"Hello World"5次,我们可以通过复制粘贴调用这个Log函数5次做到。

F5运行代码

可以看到,"Hello World"在控制台打印了5次。

1. for循环

下面使用for循环的方式来简化这个过程

我们可以先写一个for循环,for循环开始于关键字for,后接口号。括号内分三个部分,这三个部分都用;隔开。

css 复制代码
第一部分:是一个变量的声明,通常你需要在这里声明变量,也可以在外面声明。这里写`int i = 0`,变量名去i,是一种习惯,有可能是iterate的首字母,当然这个变量名可以取任何名字,这个变量不一定要是整数,甚至也不一定要等于0。

第二部分:是一个条件,只要这个条件的结果为真,那么我们将执行for循环内部的代码(循环体)。在这个例子中想让Log函数执行5次,所以我们给的条件应该是`i < 5`,因为第一部分i的初始值是0。

第三部分:这部分会在for循环的下一次迭代之前被调用。在这个例子中我们写`i++`,这里的意思是要将没循环一次后变量i增加1。

`i++`和`i += 1` 或者 `i = i + 1`是一个意思。

然后我们写for循环的循环体,这个循环体就是将要被循环的部分,也就是会被多次执行的代码。当然,这些条件决定了这些代码是否会被执行。有可能执行1次,也有可能执行100次,这取决于循环条件。这里的循环体就是Log("Hello World");

去掉多余的log函数调用。

修改后的代码如下

我们按下F5运行代码

可以看到实现了一样的效果。

下面我们更深入一点

当指针执行到for (int i = 0; i < 5; i++)这一行的时候,首先要做的就是声明这个变量,不管写的什么都要先声明。在本例中声明了一个新的变量 i,然后接下来就要看i < 5这个条件是否满足,如果条件为真,我们就会跳到for循环里面,执行for循环内部的代码Log("Hello World");,当我们完成了for循环体,到达for循环尾部的大括号}时,程序会回到for (int i = 0; i < 5; i++)这行,执行i++,执行完i++,会再进行条件判断i < 5是否为真,当然i开始为0,循环一轮后i++,i变为了1,我们检查条件1是否小于5,当然是小于5,所以又去执行循环体,然后重复这个过程,直到i = 4,运行完循环体,跳到i++,然后i = 5,我们比较5是否小于5,显然5并不小于5,条件返回false时,跳出循环,循环结束。这就是for循环重复运行5次的实质。

现在,我想强调,for循环括号里面的三部分,第一段是开始for循环时会运行一次,第二段是一个比较后的bool类型,它会评估是否执行循环体,第三段看上去是要在for循环的最后被执行。

我们可以把变量i的声明放在for之前,然后让for后面的第一部分空着。

我们也可以将i++放入循环体最后一步

这样的结果也是一样。

我们F5运行程序

看到结果是一样。虽然看起来有点怪,但是不影响结果,因为我们没有改变代码的实际行为。我们只是移动了代码的位置。

同样的,我们可以创建一个bool变量,取名condition或其他,将其设为true,然后把这个condition的值作为条件。再循环体内做完i++后,我们写上if i 不小于5,我们就设置condition为false。

F5运行程序

可以看到,结果依然是一样的。因为我们没有改变程序的行为。我们只是稍微用不同的写法重写了代码。这只是告诉你,for循环可以做任何重复执行的事。不一定非要按for(int i = 0; i < 5; i++)这样写之类的。他们可以包含任何你想要的语句。你当然还可以在for循环中调用函数等等。

你也可以将for后面第二部分完全不写

不写,相当给了条件为true,如果我们运行代码,就变成了无限循环。

F5运行程序

你可以看到不断的打印"Hello World",可以看到程序会一直运行下去,除非我们手动停止(Shift + F5)。

OK,就这么多,for循环真的非常简单。另外,他们在遍历数组之类的事情的时候,也非常有用。

2. while循环

接下来,我们看看while循环

while循环和for循环功能一样,不过while循环没有for循环的第一部分和第三部分,仅有条件语句。

我们写while循环时,先输入while关键字,后接括号输入循环结束条件,如下改造代码

我在他们两个之间打上一堆==========用来分开他们。

按下F5运行代码。

可以看到两次循环得到完全一样的结果。都是将"都是将Hello World"打印5次。

那这两种循环,该用哪种呢,这就看你是否需要变化,因为循环的内容都是一样的,你都可以交换使用,它更像一种习惯或风格,而不是规矩。这两种循环没有什么实质性的区别,他们可以做完全一样的事情。

但是有一种习惯约定,如果你有一个已经存在的确定条件,你只是想做一些比较,例如前面提到的游戏循环,那里有个变量叫做running,你可能想让游戏持续循环,只要这个running变量为true即可,因为running等于true,意味着你的程序在持续运行,如果要做类似于这样的事情的时候,我可能会使用while循环,因为条件是不变的,我不需要在每次循环之后改变这个条件,我们不需要在循环前先声明这个条件变量,我们可以将之前的变量或者函数调用后的结果拿来用,实际上不需要保持更新或者初始化某些东西。

然后当我们处理数组的时候,一个确定长度的数组,例如我们的数组有10个元素,那我们可以使用for循环,因为我想让代码循环10遍,因此我想要跟踪某些变量,仅仅循环10次。而这些变量可用于处理数组中的元素,因为如果我想要处理10个元素长度的数组中的元素时,我需要一个偏移量或者叫做索引的东西来处理元素,这些在后面数组内容中会介绍到。对于i这个变量,我们要跟踪它从0, 1, 2, 3, 4...,当我们的迭代进行的时候,这和数组的索引完全一致,非常适合。

3. do while循环

我们学习了for和while循环,实际上还有一种循环do while循环,不过不太常用,但是它确实存在而且还有点作用。但相比于for和while来说,不太常见。

我们先写上do关键字,然后执行循环体,然后再在后面写上while,while后面跟上循环条件。do whilewhile的唯一区别就是,do while无论如何都会先执行一次,我们修改下代码如下。

F5运行代码

可以看到do while执行了一次。

以上就是这篇的所有内容,关于循环的一些简单介绍,后续的篇章中会大量使用到循环,它会在你几乎所有能想到的算法中被使用。循环也对数组非常有用,我们后面也会介绍到如何使用循环来处理数组。

相关推荐
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
青花瓷5 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
捕鲸叉6 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
Dola_Pan7 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法
yanlou2337 小时前
KMP算法,next数组详解(c++)
开发语言·c++·kmp算法
小林熬夜学编程7 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
阿洵Rain8 小时前
【C++】哈希
数据结构·c++·算法·list·哈希算法