istream& operator>>(istream& stream, list<monom>& pol)
{
char z1,z2;
monom m;
stream >> noskipws;
while(stream >> m.a >> z1 >> z2 >> m.i) {
if (z1!=’x’ || z2!=’^’) {
stream.setstate(ios::failbit);
break;
}
pol.push_back(m);
// This is where I do not understand why stream >> z1
if (stream.peek()==’\n’) {
stream >> z1;
break;
}
}
pol.sort();
pol.remove(null);
return stream;
}
我有一个类
monom
,并且想重载>>
运算符以获取包含monom
的列表。查看代码,直到理解为止if (stream.peek()==’\n’) {
stream >> z1;
break;
}
我知道
stream.peek()
会查看下一个空格,如果它为空(== \n
),那么为什么要stream >> z1
则会使我感到困惑。 最佳答案
该代码运行循环,读取格式为monom
的<m.a value>x^<m.i value>
个项目,直到到达换行符为止。假定值或项目之间没有空格,包括换行符。
循环使用peek()
检查每个成功读取的monom
项目是否以换行符结尾。如果存在换行符,则从流中提取换行符(因此它不会保留在流中供以后阅读以查看),然后循环结束。否则,循环将继续读取下一个monom
项。
使用noskipws
是为了使operator>>
不会将换行符视为可以跳过的空格。
关于c++ - stream.peek()=='\n'时流>> z1的用途是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55283220/