2013-03-26 14 views
9

Jeśli mam obiekt std::ostringstream o nazwie oss, rozumiem, że mogę zrobić std::cout << oss.str(), aby wydrukować ciąg znaków. Ale wykonanie oss.str() spowoduje skopiowanie zwracanego ciągu. Czy istnieje sposób bezpośredniego drukowania bazowego pliku streambuf?jak napisać ostringstream bezpośrednio do cout

Z góry dzięki!

Odpowiedz

9

Nie, jeśli używasz std::ostringstream. Nie można odczytać bazowego bufora (stąd o w ostringstream), więc musisz polegać na implementacji, aby zrobić to za Ciebie, poprzez str().

Jednak jeśli używasz std::stringstream (zauważ brak o), wówczas bufor bazowy jest czytelny i basic_ostream „s mają szczególne przeciążenia ForReading z buforów:

#include <iostream> 
#include <sstream> 

int main() 
{ 
    std::stringstream ss1; 
    ss1 << "some " << 111605 << " stuff" << std::flush; 

    std::cout << ss1.rdbuf() << std::endl; 
    std::cout << ss1.str() << std::endl; 
} 

wyjściowa:

niektóre 111.605 rzeczy
niektóre 111.605 rzeczy

(Example derived from here.)

Kopiuje bezpośrednio z bazowego bufora, bez kopii pośredniej.

+0

Dzięki! Twoje rozwiązanie działa. Znalazłem również ten post http://stackoverflow.com/questions/10009809/query-stdostringstream-content/10010160#10010160 gdzie ostream służy do osiągnięcia tego samego. Właśnie zastanawiałem się jaka jest różnica między używaniem ostream i stringstream. który z nich jest bardziej wydajny? –

+0

@WinstonHuang: Musisz go profilować, aby dowiedzieć się, który jest bardziej wydajny. Wątpię, by było to trochę szybsze i jest to z pewnością bardziej skomplikowane niż użycie 'std :: stringstream'. – GManNickG

Powiązane problemy