[英]Please help me to understand the difference between streambuf, stringbuf and stringstream?
请有人帮助我理解“streambuf,stringbuf和stringstream”之间的区别。
void f1(std::string const& text)
{
std::stringstream inStream(text);
cout<<inStream.str()<<endl;
}
或者如果我写
void f2(std::string const& text)
{
std::stringbuf inStream(text);
cout<<inStream.str()<<endl;
}
两者都显示相同的结果。 我什么时候应该使用stringbuf或stringstream? 提前致谢。
stringbuf
由stringstream
,它为流提供缓冲区。 一个streambuf
仅仅是一个基类stringbuf
。 你想要的是一个stringstream
,如果你需要格式化输入/输出入/出流(比如把号码串),否则您希望继续使用一个简单的string
。 你永远不需要自己打扰streambuf
家庭。
std::stringstream
对象包含一个std::stringbuf
对象,该对象充当流操作符正在操作的底层数据缓冲区。 stringbuf
对象基本上是一个字符串类型的包装器......所以你基本上是使用>>
和<<
运算符通过stringstream
接口从字符串类型的对象中插入和提取。 另一方面, streambuf
对象是使用stdin
, stdout
, stderr
或fstream
对象时用于文件I / O的底层I / O内存缓冲区。 如果你看一下标准的C风格的I / O函数,不同之处就像你必须为像sprintf
这样的函数提供一个内存缓冲区来工作,其中fprintf
写入底层的托管I / O缓冲区。 对于C ++, stringbuf
对象允许您访问stringstream
对象的底层内存缓冲区。
对于那些来自Java的人:
我被赋予了stringbuf,streambuf,stringstream,istringstream,ostringstream,iostream,io_base等的类层次结构与2003~2004左右发布的Java Nio类的惊人相同(参考Jdk 1.4 Nio)。
streambuf是stringbuf和stringstream的基类,streambuf具有实现类可以覆盖以提供特定实现的虚方法。 stringstream是一个包含stringbuf的类,因此可以比单独的stringbuf具有稍微不同的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.