2013-07-19 12 views
7

Ho un oggetto stringstream e mi chiedo come inizializzarlo.come inizializzare l'oggetto stringstream

stringstream os; 
for(int i = 0; i < 10; ++i){ 
     value = rand() % 100; 
     os<<value; 
     cout<<os.str()<<" "<<os<<endl; 
     ntree->insert(os.str()); 
     //I want my os object to be initialized here 
    } 
+1

Ti _really_ dire "inizializzare"? Il stringhe viene inizializzato quando lo costruisci. Per definizione, una cosa non può essere inizializzata più tardi nella sua vita. Intendi "reset"? –

+0

si desidera ripristinare – realtekme

+0

Quindi modificare la domanda per indicare questo, per favore. –

risposta

10

Se si desidera una nuova ostringstream oggetto ogni volta attraverso il ciclo, la soluzione più ovvia è quella di dichiarare una nuova uno nella parte superiore del ciclo. Tutti i tipi ostream contengono molto stato e, a seconda del contesto, potrebbe essere più o meno difficile ripristinare tutto lo stato.

+1

Ciò significherebbe anche che sarebbe meglio incapsulato all'interno dell'ambito del ciclo, che è sempre buono :) (Vedi "Elemento 26: rinviare le definizioni delle variabili il più a lungo possibile" in "Effective C++" di Scott Meyers –

0

La tua domanda è un po 'vaga ma l'esempio di codice lo rende più chiaro.

si hanno due scelte:

Prima, ostringstream initialze attraverso costruzione (costruire un altro esempio in ogni fase del ciclo):

for(int i = 0; i < 10; ++i) { 
    value = rand() % 100 ; 
    ostringstream os; 
    os << value; 
    cout << os.str() << " " << os << endl; 
    ntree->insert(os.str()); 
    //i want my os object to initializ it here 
} 

seconda, azzerare il buffer interno e cancellare lo stato del canale (stato di errore, la bandiera EOF, ecc):

for(int i = 0; i < 10; ++i) { 
    value = rand() % 100 ; 
    os << value; 
    cout << os.str() << " " << os << endl; 
    ntree->insert(os.str()); 
    //i want my os object to initializ it here 
    os.str(""); 
    os.clear(); 
} 
+0

lo stato del flusso è tutt'altro che banale: nel caso più generale, devi anche reinizializzare 'fmtflag', la precisione, il carattere di riempimento e qualsiasi stato assegnato dinamicamente da' xalloc'. (L'ultimo è molto, molto difficile). –

7

Se si desidera sostituire il contenuto della stringstream con qualcos'altro, si può fare, che ci il metodo str(). Se lo chiami senza argomenti, sarà solo ottenere il contenuto (come stai già facendo). Tuttavia, se si passa una stringa, sarà impostare il contenuto, ignorando qualsiasi cosa contenesse prima.

Es .:

std::stringstream os; 
os.str("some text for the stream"); 

Per ulteriori informazioni, controllare la documentazione del metodo: http://www.cplusplus.com/reference/sstream/stringstream/str