c++ - 如果我从流中提取某些内容,流中是否不再包含我提取的内容?
问题描述
如果我有如下代码并且我首先从流"This"
中存储:str
streem
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
.
推荐阅读
- node.js - 在 lambda 函数节点 js 中从 api 获取响应时出错
- c# - 基于标志的锁定
- php - SSL Yii 连接到 postgresql 谷歌云数据库
- java - 如何检测两个片段的两个不同的recyclerview适配器是否同时选择两个项目?
- excel - 运行时错误“424” - 需要对象 - 很确定我正确定义了变量但代码仍然中断?
- excel - 我的代码在我通过 f8 时有效,而在我 f5 时无效
- apache - 在给定日期执行规则 htaccess
- swift - EASession 流功能不触发
- azure-storage - 需要 PCS_AAD_APPID 等才能在本地运行 Azure IoT 存储适配器微服务器
- excel - 如何修复 Excel VBA 中的 pastespecial 错误:运行时错误 1004