我在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(“”),这很好.)
令人困惑的是,像清晰的声音这样的功能会清除数据,但事实并非如此.