如何清除流串的缓冲区?
我在两个循环中有一个流串,它正在燃烧我的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(),但它不是。那我怎么做这个?
显而易见的解决方案是一种新的stringstream
每一次,例如:
for (...) {
std::stringstream ss;
for (...) {
// ...
}
}
这是正路stringstream
被设计用来使用。 (另外:你 真的想要一个stringstream
,或只是一个ostringstream
?)
我在这里使用它来改变一个字符串中的浮点数,并把这个字符串放在另一个大字符串中。最好做什么?如果我把std :: stringstream ss;在一个循环中,它会在RAM中创建很多ss? – Nazka 2011-06-16 10:42:26
'std :: ostringstream ss; ss“theDouble; theString + = ss.str();'如果'stringstream'在循环中,一次只有一个在内存中。 – 2011-06-16 12:12:18
如果你使用的C++ 0x:
ss.swap(stringstream());
Visual Studio 2010(SP1)支持它。
如果你不使用的C++ 0x:
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
它不会清除内存,但是你可以使用你的stringstream
对象,因为它会之前是空的。
我会把stringstream放入循环中。 – 2011-06-16 10:25:41
如果我把std :: stringstream ss;在一个循环中,它会在RAM中创建多个ss并将其烧坏。或者它会在循环结尾删除ss,因为它是在循环中创建的? (这里感觉一个noob问题:)但我是! ) – Nazka 2011-06-16 10:52:20
它在程序循环时被创建和销毁。顺便说一句,你是什么意思“刻录RAM”? – 2011-06-16 13:49:19