请教这段无显式控制变量的C++ for循环的工作机制
拆解这段无显式初始化的for循环
嗨,我来帮你理清楚这段代码里的for循环逻辑~首先先把你给出的代码完整贴出来:
int n = 123456; vector<int> v; for(; n; n/=10) v.push_back( n%10 );
先明确:这个for循环有控制逻辑,控制变量就是n
C++里的for循环结构是 for(初始化表达式; 条件表达式; 更新表达式),其中三个部分都可以为空——这里只是把「初始化表达式」留空了,因为n已经在循环外面提前定义并赋值了。
逐部分拆解循环的工作原理
我们一步步看这个循环的执行过程:
- 条件判断:循环的条件是
n,在C++里,非零的整数会被当作true,零则是false。所以只要n不等于0,循环就会继续执行。 - 循环体执行:每次进入循环,都会执行
v.push_back(n%10)——n%10是取n的最后一位数字,比如初始n=123456时,123456%10=6,就把6添加到vector里。 - 更新变量:循环体执行完后,会执行
n /=10,也就是n = n / 10,这会把n的最后一位去掉(因为是整数除法),比如123456除以10后变成12345。
举个具体的执行流程例子
以初始n=123456为例:
- 第1次循环:
n=123456(非零)→ 向v中添加6 →n变为12345 - 第2次循环:
n=12345(非零)→ 向v中添加5 →n变为1234 - 第3次循环:
n=1234(非零)→ 向v中添加4 →n变为123 - 第4次循环:
n=123(非零)→ 向v中添加3 →n变为12 - 第5次循环:
n=12(非零)→ 向v中添加2 →n变为1 - 第6次循环:
n=1(非零)→ 向v中添加1 →n变为0 - 第7次判断:
n=0,条件为false,循环结束
最终vectorv里的元素就是[6,5,4,3,2,1],也就是原数字的各位数字逆序存储。
内容的提问来源于stack exchange,提问作者D. Gaira
相关产品推荐
相关产品推荐

