for

for 语句的语法形式是:

  for (init-statement condition; expression)
  statement

init-statement 必须是声明语句、表达式语句或空语句。这些语句都以分号结束。

一般来说,init-statement 用于对每次循环过程中都要修改的变量进行初始化,或者赋给一个起始值。而 condition 则是用来控制循环的。当 condition 为 true 时,循环执行 statement。如果第一次求解 condition 就得 false 值,则不执行 statement。expression 通常用于修改在 init-statement 中初始化并在 condition 中检查的变量。它在每次循环迭代后都要求解。如果第一次求解 condition 就得 false 值,则始终不执行 expression。通常,statement 既可以是单个语句也可以是复合语句。

假设有下面的 for 循环,用于输出一个 vector 对象的内容:

  for (vector<string>::size_type ind = 0;
  ind != svec.size(); ++ind) {
  cout << svec[ind]; // print current element
  // if not the last element, print a space to separate from the next one
  if (ind + 1 != svec.size())
  cout << " ";
  }

它的计算顺序如下:

循环开始时,执行一次 init-statement。在这个例子中,定义了 ind,并将它初始化为 0。

接着,求解 condition。如果 ind 不等于 svec.size(),则执行 for 循环体。否则,循环结束。如果在第一次循环时,条件就为 flase,则不执行 for 循环体。

如果条件为 true,则执行 for 循环体。本例中,for 循环体输出当前元素值,并检验这个元素是否是最后一个。如果不是,则输出一个空格,用于分隔当前元素和下一个元素。

最后,求解 expression。本例中,ind 自增 1。

这四步描述了 for 循环的第一次完整迭代。接着重复第 2 步,然后是和 3、4 步,直到 condition 的值为 false,即 ind 等于 svec.size() 为止。

应该谨记:在 for 语句头定义的任何对象只限制在 for 循环体里可见。因此,对本例而言,在执行完 for 语句后,ind 不再有效(即不可访问)。

for 语句头中,可以省略 init-statement、condition 或者 expression(表达式)中的任何一个(或全部)。

如果不需要初始化或者初始化已经在别处实现了,则可以省略 init-statement。例如,使用迭代器代替下标重写输出 vector 对象内容的程序,为了提高易读性,可将初始化移到循环外面:

  vector<string>::iterator iter = svec.begin();
  for( /* null */ ; iter != svec.end(); ++iter) {
  cout << *iter; // print current element
  // if not the last element, print a space to separate from the next one
  if (iter+1 != svec.end())
  cout << " ";
  }


注意此时必须要有一个分号表明活力了 init-statement——更准确地说,分号代表一个空的 init-statement。

省略 condition,则等效于循环条件永远为 true:

  for (int i = 0; /* no condition */ ; ++i)

相当于程序写为:

  for (int i = 0; true ; ++i)

这么一来,循环体内就必须包含一个 break 或者 return 语句。否则,循环会一直执行直到耗尽系统的资源为止。同样地,如果省略 expression,则必须利用 break 或 return 语句跳出循环,或者在循环体内安排语句修改 condition 所检查的变量值。

  for (int i = 0; i != 10; /* no expression */ ) {
  // body must change i or the loop won't terminate
  }

如果循环体不修改 i 的值,则 i 始终为 0,循环条件永远成立。


可以在 for 语句的 init-statement 中定义多个对象;但是不管怎么样,该处只能出现一个语句,因此所有的对象必须具有相同的一般类型:

  const int size = 42;
  int val = 0, ia[size];
  // declare 3 variables local to the for loop:
  // ival is an int, pi a pointer to int, and ri a reference to int
  for (int ival = 0, *pi = ia, &ri = val;
  ival != size;
  ++ival, ++pi, ++ri)
  // ...



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值