请帮我理解streambuf,stringbuf和stringstream之间的区别?

Alo*_*lok 19 c++

请有人帮助我理解"streambuf,stringbuf和stringstream"之间的区别.

void f1(std::string const& text)
{
     std::stringstream           inStream(text);
    cout<<inStream.str()<<endl;
 }
Run Code Online (Sandbox Code Playgroud)

或者如果我写

void f2(std::string const& text)
{
    std::stringbuf           inStream(text);
    cout<<inStream.str()<<endl;
 }
Run Code Online (Sandbox Code Playgroud)

两者都显示相同的结果.我什么时候应该使用stringbuf或stringstream?提前致谢.

Xeo*_*Xeo 22

A stringbuf由a使用stringstream,它为流提供缓冲区.A streambuf只是a的基类stringbuf.你想要的是一个stringstream如果你需要格式化输入/输出进/出流(如将数字放入字符串),否则你想继续使用简单string.你永远不需要自己打扰streambuf家人.

  • 我通过“干扰”`streambuf` 使程序运行得相当快,所以我不会说它从来没有用。 (6认同)

Jas*_*son 7

std::stringstream对象包含一个std::stringbuf用作该流运营商上操作的基础数据缓冲器对象.该stringbuf对象基本上是一个字符串类型的包装...所以你基本上是通过接口使用>><<运算符从字符串类型的对象插入和提取stringstream.甲streambuf在另一手对象是被用于文件的基本I/O存储器缓冲器I/O使用任一时stdin,stdout,stderr,或的fstream对象.如果你看了标准的C风格的I/O功能,不同的是怎么样,你必须提供一个内存缓冲区的功能一样sprintf工作,在那里,作为fprintf写入底层管理I/O缓冲区.对于C++,stringbuf对象允许您访问对象的底层内存缓冲区stringstream.