如果我从流中提取某些内容,该流是否不再包含我提取的内容?

If I extract something from a stream, does the stream not contain what I extracted anymore?

本文关键字:提取 不再 是否 包含我 如果      更新时间:2023-10-16

如果我有如下代码,并且我首先将"This"存储在流streemstr中:

using namespace std;
int main()
{
istringstream streem("This is the content in the stream.");
string str;
streem>>str;
cout<<str; //This will cout "This"

如果我再次streem>>str并再次cout<<str,这将显示is。 那么这是否意味着"This"不再存在于istringstream中? What about文件流",因为它们保留了数据?

不同的流答案是不同的。

stringstream有一个内存缓冲区和一个指示器,可以记住您在读数上的位置。因此,下一次读取从上一次读取停止的地方开始。

文件流的工作方式类似,它们会记住文件的哪个点。在这两种情况下,您都可以使用seekg更改位置(包括重置到开头(。

文件流没有单独的读取和写入位置,因此对于文件流,相同的代码的行为可能不同。(事实上,我认为它会导致未定义的行为在没有干预寻求的情况下读取和写入(。

其他输入流可能没有可搜索的缓冲区,例如cin.