Str*_*vaz 21 c++ for-loop c++11
我发现了这种语法
for (string st; getline(is, st, ' '); v.push_back(st));
^ ^ ^
initialization condition, increment ???
Run Code Online (Sandbox Code Playgroud)
v.push_back(st)当工作被覆盖时,工作如何作为增量getline(is, st, ' ')?
Pao*_*o M 34
这相当于:
for (string st; getline(is, st, ' '); )
v.push_back(st);
Run Code Online (Sandbox Code Playgroud)
要么:
{
string st;
while (getline(is, st, ' '))
v.push_back(st);
}
Run Code Online (Sandbox Code Playgroud)
事实是,每当条件满足时,递增语句就在循环体的末尾执行.所以,你可以把它看作身体的最后一条指令.
有时,您可以将增量语句留空; 在这种情况下,您将身体的唯一指令放在增量语句的位置.
Rom*_*kov 28
从标准:
for ( init-statement condition(optional) ; iteration_expression(optional) ) statement
Run Code Online (Sandbox Code Playgroud)
iteration_expression - 任何表达式,在循环的每次迭代之后和重新评估条件之前执行.通常,这是增加循环计数器的表达式
上面的语法产生的代码相当于:
{
init_statement;
while ( condition ) {
statement;
iteration_expression;
}
}
Run Code Online (Sandbox Code Playgroud)
所以它不必增加.
它不会增加任何东西.当条件部分不满足时,for循环终止.因此,当getline返回false时,循环将终止.
在许多情况下,操作确实会增加一个变量,并且条件可能会检查该变量是否超过某个限制.不要让这让你感到困惑,只要记住for循环有以下(一般)结构:
for (init; condition; operation)
Run Code Online (Sandbox Code Playgroud)
它不必须是一个增量的表达.它的作用取决于你.代码与语义相同.
string st; // run before the loop and only once
while (getline(is, st, ' ')) { // condition used to determine the loop should continue or break
v.push_back(st); // run every time inside the loop
}
Run Code Online (Sandbox Code Playgroud)
答案是它不能作为增量.
for循环将与下面的while循环具有相同的结果:
string st;
while (getline(is, st, ' '))
{
v.push_back(st);
}
Run Code Online (Sandbox Code Playgroud)
如果你给出的for循环示例是一种理想的编码风格,人们可能会争论.
v.push_back(st)当工作被覆盖时,工作如何作为增量getline(is, st, ' ')?
它没有.你误解了(或被误导了)for循环结构.
以下是其组成部分:
false;而已.
没有什么可以决定这些组件的哪些(如果有的话)执行增量.考虑一下常见的例子for (;;)......根本没有任何操作,更不用说增量了!