如果我不清除字符串流会发生什么情况?
What will happen if I won't clear 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("")
,这很好。
这很令人困惑,因为像clear
这样的函数听起来像是要清除数据,但事实并非如此。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 发生注入类名时会发生什么情况?(C++)
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 重新分配向量时,向量中的内存会发生什么情况
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 使用 Google 基准测试时返回值会发生什么情况?
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果未定义的C++行为符合 C 定义的行为,会发生什么情况?
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 将虚拟方法定义为私有方法时会发生什么情况?
- 如果我将"reference to vector"分配给"vector"会发生什么情况
- 初始化原子指针是原子的吗?如果初始化或内存分配引发,会发生什么情况?
- 如果我不清除字符串流会发生什么情况?