如果我不清除字符串流会发生什么情况?

What will happen if I won't clear stringstream?

本文关键字:什么情况 清除 字符串 如果      更新时间:2023-10-16

我在 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(""),这很好。

这很令人困惑,因为像clear这样的函数听起来像是要清除数据,但事实并非如此。

相关文章: