0
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,这让我感到困惑。

4

1 回答 1

1

代码运行一个循环读取monom格式化为<m.a value>x^<m.i value>直到它到达换行符的项目。它假定值或项目之间没有空格,包括换行符。

该循环用于peek()检查每个成功读取monom的项目是否以换行符结尾。如果存在换行符,则从流中提取换行符(因此它不会保留在流中以供稍后读取查看)并且循环结束。否则,循环继续读取下monom一项。

noskipwsis的使用operator>>不会将换行符视为可以跳过的空格。

于 2019-03-21T15:38:36.327 回答