我有一个两个循环的流串,它正在烧我的RAM。那么如何正确清除steamstring的缓冲区呢?这就是简化:
stringstream ss (stringstream::in | stringstream::out);
for()
{
for()
{
val = 2;
ss << 2;
mystring = ss.str();
// my stuff
}
// Clear the buffer here
}
它写了2然后22然后222 ...我试过.clear()或.flush()但不是那样的。那我该怎么做?
答案 0 :(得分:7)
显而易见的解决方案是每次使用新的stringstream
,例如:
for (...) {
std::stringstream ss;
for (...) {
// ...
}
}
这是stringstream
设计使用的方式。 (还有:你呢
真的想要一个stringstream
,或只是一个ostringstream
?)
答案 1 :(得分:6)
如果要清除多余的字符,请设置ss.str("");
(编辑:谢谢)。
如果您的信息流在之前的转换过程中设置了任何错误标记,请使用.clear()
。
答案 2 :(得分:3)
如果使用C ++ 0x:
ss.swap(stringstream());
Visual Studio 2010(SP1)支持它。
如果您不使用C ++ 0x:
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
它不会清除内存,但您可以使用stringstream
对象,因为它之前是空的。