for循环执行顺序详解(避坑)

今天刷题碰到的一个坑,就是没有注意到for循环的每次判断条件导致的**,也就是for循环的第二句**,每次循环都会执行该判断条件。

for循环的表达式一般如下:

for(表达式1;表达式2;表达式3){
  表达式4;
}

执行的顺序为:

  1. 第一次循环:
    首先执行表达式1(一般为初始化语句,只执行一次),再执行表达式2(条件判断语句),判断表达式2的条件,如果符合,则执行表达式4,最后执行3。 如果判断2不符合,则停止执行,且不会执行表达式3.
  2. 之后的循环:
    首先执行表达式2,如果符合,继续执行表达式4,然后是3。否则停止执行,且不执行表达式3
  3. 如此往复,直到不再满足表达式2的条件。执行顺序为:1243,243,243

注意点是当我们在循环体中,修改了for循环中表达式2,那么在条件判断语句时,你的for循环很可能就会出错。

案例

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    queue<int> q;
    q.push(10);
    q.push(20);
    q.push(30);
    q.push(40);
    //这个循环只会打印出两个数,因为每次队列弹出值都会改变q的大小
    for (int i = 0; i < q.size(); i++) {
        cout << q.front() << ",";
        q.pop();  //弹出队头
    }             // 10,20
    //所以为避免每次q的大小改变,可以设定一个临时变量int temp = q.size(); 把temp放到循环中。防止非预期结果。

    cout << endl;
    //这个循环会执行四次,因为表达式2没有改变,表达式1仅进行初始化。
    for (int i = q.size() - 1; i >= 0; --i) {
        cout << q.front() << ",";
        q.pop();  //弹出队头
    }             // 10,20,30,40,
}
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles Ray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值