首页 > 解决方案 > 如果我从流中提取某些内容,流中是否不再包含我提取的内容?

问题描述

如果我有如下代码并且我首先从流"This"中存储:strstreem

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文件流`,因为它们保留数据?

标签: c++stream

解决方案


对于不同的流,答案是不同的。

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

文件流以类似的方式工作,它们记住文件的哪个点。在这两种情况下,您都可以使用seekg.

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

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


推荐阅读