Como limpar o buffer de um streamstring?
-
28-10-2019 - |
Pergunta
Eu tenho um streamstring em dois loops e está queimando minha RAM.Então, como limpar corretamente o buffer de um Steamstring?É assim para simplificar:
stringstream ss (stringstream::in | stringstream::out);
for()
{
for()
{
val = 2;
ss << 2;
mystring = ss.str();
// my stuff
}
// Clear the buffer here
}
Escreveu 2, depois 22 e depois 222 ... Tentei .clear () ou .flush () mas não é isso.Então, como faço isso?
Solução
A solução óbvia é usar um novo stringstream
a cada vez, por exemplo:
for (...) {
std::stringstream ss;
for (...) {
// ...
}
}
Esta é a forma como stringstream
foi projetado para ser usado.(Também: você
realmente quer um stringstream
ou apenas um ostringstream
?)
Outras dicas
Defina ss.str("");
quando quiser limpar os caracteres em excesso (Editar: obrigado).
Use .clear()
se seu stream tiver definido qualquer sinalizador de erro no processo da conversão anterior.
Se você usar C ++ 0x:
ss.swap(stringstream());
Visual Studio 2010 (SP1) oferece suporte.
Se você não usa C ++ 0x:
ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();
Isso não limpará a memória, mas você pode usar seu objeto stringstream
, pois estaria vazio antes.