我正在浏览 sstream 库,我遇到了 stringstream。谷歌搜索我得出的结论是它与字符串相同,但我无法理解。
据我了解,它是创建一个字符串并将其用作“cin”来连接?
#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream
int main () {
std::stringstream ss;
ss << 100 << ' ' << 200;
int foo,bar;
ss >> foo >> bar;
std::cout << "foo: " << foo << '\n';
std::cout << "bar: " << bar << '\n';
return 0;
}
粗略地说,a
stringstream
基本上是内存中的一个缓冲区,它的行为类似于文件。简单易行。它允许流允许的相同操作,但它不绑定到任何物理设备;所有操作都在内存中执行,使用字符串作为存储。
虽然流 不允许访问底层物理设备,但字符串流 确实允许通过操作访问它用作缓冲区的流
获取缓冲区的副本,以及
自己建立它。
流是输出和/或输入缓冲区。通过它们,呈现了一个或多或少统一的界面,允许您以同质的方式访问不同的数据源。
您可以使用输出流将数据存储在文件中,将相同的信息写入屏幕,或将其输出到打印机,输入流也是如此。
stringstream
它是一个在内部缓冲区上工作的流。它不写入文件或从键盘读取。您发送到该流的内容最终会在内存中。它是干什么用的?一般供内部使用。相反,该类在
string
物理上表示一个字符串,其接口旨在存储和管理字符串。两个类之间的一些区别:
string
您没有重载插入/删除运算符。如果它不是缓冲区,则不需要表现得像一个缓冲区。string
它不能转换本机类型。stringstream
没有迭代器。缓冲区是信息的存储,要首先使用它,您必须将其解包。此功能可防止它直接与绝大多数 STL 函数一起使用。stringstream
不支持显式调整其内部缓冲区的大小。stringstream
到另一个缓冲区中。为此,您必须提取其内容(例如使用toString()
)方法。iomanip
适用于stringstream
但不适用于string
。stringstream
主要用于 s 上的格式化操作,string
就像fstream
s 用于文件一样。您可以使用
iostream
s 必须操作流的所有函子,例如输入/输出数字 (std::hex
,std::scientific
等...)、字符串 (std::quoted
)、填充 (std::setw,std::setfill
)、位置设置 (.imbue()
,std::put_money
) 等。换句话说,如果连同
iostream
它的 s 重载, 它是的C ++operator<</>>
替代方案printf
,fstream
它是像使用容器一样使用流)。fprintf
stringstream
sprintf
std::istream_iterator
std::ostream_iterator