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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top