for 循环 and while 循环(四)

来源:互联网 发布:no热力学数据 编辑:程序博客网 时间:2024/05/21 11:25

for 循环 and while 循环
for 循环 and while 循环(二)
for 循环 and while 循环(三)

  • while(true):循环体内部一定要有退出结束语句,否则就是死循环;
  • while (j < n):
    • 如果遍历的是全部元素的话,显然 j 是下标,而 n 是集合的长度,也是最后一个元素的下一个位置;比如 n = len(coll)

1. 循环中的自加运算

while (++i < n)while (i++ < n)

除了在循环经历的次数上的区别外,++i 要比 i++ 少一次。两者更为重要的区别在于,参与比较的循环变量(i)其值是否和循环体内的该变量的值保持一致。while(++i < n) 能够保持一致,while (i++ < n)就无法保持一致。这会直接导致一个什么结果?就会导致如果设置不当,while (i++ < n),在遍历数组时有可能发生访问越界。

二者的等价形式:

while (++i < n)等价于:++i;while (i < n){    ...    ++i;}
while (i++ < n)等价于while (i < n){    ++i;    ...}

2. while(i ++ < n) 访问越界的解决办法

while (i++ < 5 && i < 5){    ...}

3. 变量的位置

void trim(const char exp[], int& lo, int& hi){    while (lo <= hi && exp[lo] != '(' && exp[lo] != ')')         ++lo;    while (lo <= hi && exp[hi] != '(' && exp[hi] != ')')        --hi;}

当循环退出时,如果没有越界情况的发生(lo > hi)

  • lo 会指向 ()
  • hi 则会指向 ()

4. 满足一个条件即退出

也即都满足时才会执行;

while (A && B){    ...}
  • 下标不越界
  • 查找的元素未找到

5. 突然死亡法的等价表示

while (true){    ...    if (A){        ...        break;    }}

这种写法,实际上等价于:

while (!A){    ... }

6. 循环退出时

while (j < n)  ⇒ 循环退出时 j >= n,                     # 可能把 j = n 跳过去,循环退出时 j > n                    # 也可能逐步加 1,在 j = n 退出循环,也即在循环退出时,j == n
0 0
原创粉丝点击