I have a streamstring in two loops and it is burning my RAM. So how to clear properly the buffer of a steamstring? It is like that to simplify :
stringstream ss (stringstream::in | stringstream::out);
for()
{
开发者_Python百科for()
{
val = 2;
ss << 2;
mystring = ss.str();
// my stuff
}
// Clear the buffer here
}
It wrote 2 then 22 then 222... I tried .clear() or .flush() but it is not that. So how I do this?
The obvious solution is to use a new stringstream
each time, e.g.:
for (...) {
std::stringstream ss;
for (...) {
// ...
}
}
This is the way stringstream
was designed to be used. (Also: do you
really want a stringstream
, or just an ostringstream
?)
Set ss.str("");
when you want to clear out the excess characters (Edit: thank you).
Use .clear()
if your stream has set any error flags in the process of the prior conversion.
If you use C++0x:
ss.swap(stringstream());
Visual Studio 2010 (SP1) supports it.
If you don't use C++0x:
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
It won't clear the memory, but you could use your stringstream
object as it would be empty before.
精彩评论