c – 如果我不清除stringstream会发生什么?

我在TopCoder中做了一个图形问题,不知怎的,我的程序仍然输出错误的答案,即使我认为一切都应该没问题.我花了几个小时的时间在我的逻辑中寻找错误,事实证明,问题在于其他地方.这是一段代码,我有一个问题:

int x, y;
stringstream ssx;
stringstream ssy;
for (int i = 0; i < connects.size(); i++){
    neighbours.push_back(vector<int> ());
    edges_cost.push_back(vector<int> ());
    ssx.str(connects[i]);
    ssy.str(costs[i]);
    while (ssx >> x && ssy >> y){
        neighbours[i].push_back(x);
        edges_cost[i].push_back(y);
    }
    // The problem lied here. Apparently without these 2 lines
    // the program outputs wrong answer. Why?
    ssx.clear();
    ssy.clear();
}

正如您在评论中看到的那样,我设法解决了这个问题.但我不知道为什么我需要清除那些串流.如果我不这样做,到底发生了什么?

解决方法:

一旦从流中提取了所有数据并尝试阅读“只需一个字符!” (内置提取到int将尝试执行,以确定是否有更多数字要读取),其eof位已设置.

您通过更改其缓冲区的“内容”来重新使用流,这很好,但您也需要重置该eof位.这就是.clear()的作用.

要重新使用字符串流:

ss.str("");  // clears data
ss.clear();  // clears all error flag bits

(在你的情况下,你直接用你的新数据替换缓冲区,稍后使用.str(“newText!”),而不是写.str(“”),这很好.)

令人困惑的是,像清晰的声音这样的功能会清除数据,但事实并非如此.

上一篇:c – “stringstream”是否复制构造它的字符串?


下一篇:如何在C中从stringstream中替换一些字符?