9
如果我有一個std::ostringstream
對象叫做oss
,我明白我可以做來打印出字符串。但是做oss.str()
會導致被複制的返回字符串。有沒有辦法直接打印底層streambuf
?如何直接寫ostringstream到cout
在此先感謝!
如果我有一個std::ostringstream
對象叫做oss
,我明白我可以做來打印出字符串。但是做oss.str()
會導致被複制的返回字符串。有沒有辦法直接打印底層streambuf
?如何直接寫ostringstream到cout
在此先感謝!
如果您使用的是std::ostringstream
,則不適用。無法從中讀取底層緩衝區(因此的ostringstream
),因此您必須依靠實施通過str()
爲您執行此操作。
但是,如果你使用std::stringstream
(注意缺乏o
),那麼潛在的緩衝區是可讀的,basic_ostream
的有一個特殊的過載從緩衝區ForReading的:
#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;
}
輸出:
一些東西111605
一些東西111605
這從底層緩衝區直接複製,沒有中間副本。
謝謝!你的解決方案有效我也發現這個帖子http://stackoverflow.com/questions/10009809/query-stdostringstream-content/10010160#10010160其中ostream是用來實現同樣的事情。我只是想知道使用ostream和stringstream有什麼區別。哪一個更高性能? – 2013-03-26 14:13:43
@WinstonHuang:你必須對它進行分析以找出哪個更高效。我懷疑它有更快的速度,而且比使用'std :: stringstream'更加複雜。 – GManNickG 2013-03-26 15:29:08