【问题标题】:If I extract something from a stream, does the stream not contain what I extracted anymore?如果我从流中提取某些内容,流中是否不再包含我提取的内容?
【发布时间】:2020-05-30 23:50:08
【问题描述】:

如果我有类似下面的代码并且我首先从流streem"This" 存储在str 中:

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&gt;&gt;strcout&lt;&lt;str,这将显示is。 那么这是否意味着"This" 不再存在于istringstream 中? What aboutfile 流`,因为它们保留了数据?

【问题讨论】:

  • 没有。这意味着您已经将输出的单词移到流中的下一个位置。您可以将位置重置为流的开头以再次读取单词。

标签: c++ stream


【解决方案1】:

不同的流有不同的答案。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 2022-11-12
    • 2021-09-27
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2017-06-14
    相关资源
    最近更新 更多