c++11 标准模板(STL)(std::basic_istream)(五)

news2025/2/24 18:37:23
定义于头文件 <istream>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_istream : virtual public std::basic_ios<CharT, Traits>

类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的输入(例如整数值或空白符分隔的字符与字符串)和无格式输入(例如未处理字符和字符数组)。此功能以通过 basic_ios 基类访问的底层 basic_streambuf 类所提供的接口实现。大多数库实现中, basic_istream 有一个非继承数据成员:用于存储 basic_istream::gcount() 所返回的值。

无格式输入

从流中读并取走(移除类似指针向下一个元素移动)一个字符

std::basic_istream<CharT,Traits>::get

int_type get();

(1)

basic_istream& get( char_type& ch );

(2)

basic_istream& get( char_type* s, std::streamsize count );

(3)

basic_istream& get( char_type* s, std::streamsize count, char_type delim );

(4)

basic_istream& get( basic_streambuf& strbuf );

(5)

basic_istream& get( basic_streambuf& strbuf, char_type delim );

(6)

从流释出字符或多个字符。

所有版本都表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,这些函数进行下列内容:

1) 读取一个字符,若可用则返回它。否则,返回 Traits::eof() 并设置 failbit 和 eofbit 。

2) 读取一个字符,而若可用则存储于 ch 。否则,保留 ch 不修改并设置 failbit 和 eofbit 。注意此函数不在类型 signed char 和 unsigned char 重载,不同于有格式字符输入 operator>> 。

3) 同 get(s, count, widen('\n')) ,即读取至多 count-1 个字符并存储它们到 s 所指向的字符串中,直至找到 '\n' 。

4) 读取字符并存储它们到首元素为 s 所指向的字符数组的相继位置。释出并存储字符,直至出现任何下列条件:

  • 已存储 count - 1 个字符
  • 输入序列中出现文件尾条件(调用 setstate(eofbit) )
  • 下个可用输入字符 c 等于 delim ,以 Traits::eq(c, delim) 确定。不释出此字符(不同于 basic_istream::getline() )。

若未释出字符,则调用 setstate(failbit) 。任何情况下,若 count>0 ,则存储空字符( CharT() )于数组的下个相继位置。

5) 同 get(strbuf, widen('\n')) ,即读取可用字符并插入它们到给定的 basic_streambuf 对象,直至找到 '\n' 。

6) 读取字符并插入它们到给定的 basic_streambuf 对象所控制的输出序列。释出并插入字符到 strbuf 中,直至出现任何下列条件:

  • 输入序列中出现文件尾条件
  • 插入输出序列失败(该情况下不释出无法插入的字符)
  • 下个可用输入字符 c 等于 delim ,以 Traits::eq(c, delim) 确定。不释出此字符。
  • 出现异常(该情况下捕获而不重抛异常)。

若未释出字符,则调用 setstate(failbit) 。

所有版本都设置 gcount() 的值为释出的字符数。

参数

ch-到要写入结果到的字符的引用
s-指向要存储结果到的字符串的指针
count-s 所指向的字符串的大小
delim-用以停止释出的分隔字符。不释出且不存储它。
strbuf-要读取内容到的流缓冲

返回值

1) 释出的字符或 Traits::eof()

2-6) *this

异常

若出现错误(错误状态标志不是 goodbit )并且设置了 exceptions() 为对该状态抛出则为 failure 。

若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit 设置了 exceptions() ,则重抛该异常。

 

调用示例

#include <sstream>
#include <iostream>

int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // 读取'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // 读取 'e'
    char str[5];
    s1.get(str, 5);     // 读取 "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // 读取剩余,不包括 '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目之二手交易平台网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的二手交易平台网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架…

Android小白开发注意事项

1.设置第三方依赖包 2.第一次加载编译 3.apk打包 这个签名文件的密码在app级别的build.gradle里面 然后下一步选你要打的环境的包&#xff0c;release是发行包&#xff0c;一个给别人安装打这个&#xff0c;debug是调试包&#xff0c;会比release包大&#xff0c;并且会有点卡一…

vue3中的生命周期

一、vue3中的选项式生命周期 Vue 3中的选项式生命周期钩子基本上与Vue 2保持一致&#xff0c;它们都是定义在Vue实例的对象参数中的函数&#xff0c;它们在Vue实例的生命周期的不同阶段被调用。简单来说&#xff0c;生命周期钩子就是Vue.js特别提供的一些函数&#xff0c;会在…

服务级别协议 (SLA)管理

随着业务不断扩展以满足不断增长的客户需求&#xff0c;网络必须与相关需求保持同步。此外&#xff0c;对增强最终用户体验的需求在监控企业级网络时造成了许多瓶颈。网络管理员必须不断检查他们的网络&#xff0c;以确保所提供的服务质量很好。 虽然很难确保所提供的服务质量…

生成式AI:大语言模型ChatGPT交互的机制

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a;NSDT简石数字孪生 与 ChatGPT 有效交互的快速工程 随着生成式人工智能的普及&#xff0c;特别是 ChatGPT&#xff0c;提示已成为人工智能世界中越来越重要的技能。制作提示&#xff0c;与大型语言模型&…

Flowable开始事件-信号开始事件

信号开始事件 信号开始事件一、定义1. 图形标记2. XML标记 二、测试用例2.1 信号开始事件xml文件2.2 信号开始事件测试用例 总结 信号开始事件 一、定义 接受特定的信号发起流程实例。 1. 图形标记 2. XML标记 消息开始事件的XML <!-- 定义信号 --> <signal id&quo…

MySQL(2)

建表 mysql> create table work(-> ‘部门号’ int(11) not null,-> ‘职工号’ int(11) not null,-> ‘工作时间’ date not null,-> ‘工资’ float(8,2) not null,-> ‘政治面貌’ varchar(10) not null default 群众,-> ‘姓名’ varchar(20) not nu…

数据结构与算法——什么是数据结构

当你决定看这篇文章&#xff0c;就意味着系统学习数据结构的开始。下面我们先来讲什么是数据结构。 数据结构&#xff0c;直白地理解&#xff0c;就是研究数据的存储方式。 我们知道&#xff0c;数据存储只有一个目的&#xff0c;即为了方便后期对数据的再利用&#xff0c;就如…

Pandas和Polars之间语法和速度比较

大家好&#xff0c;Pandas是数据科学中必不可少的Python库&#xff0c;但其最大的缺点是对大型数据集的操作速度较慢。Polars是一种旨在更快地处理数据的Pandas替代方案。 本文将简要介绍Polars Python包&#xff0c;并将其与流行的数据科学库Pandas在语法和速度方面进行比较。…

Spring WebFlux 实现原理与架构图

启动原理与架构图 通过spring-boot-autoconfigure中的spring.factories文件&#xff0c;通过Spring Boot自动初始化下列类&#xff1a;HttpHandlerAutoConfiguration、ReactiveWebServerFactoryAutoConfiguration、WebFluxAutoConfiguration、ErrorWebFluxAutoConfiguration、…

问题解决:idea克隆项目依赖无法解析

问题描述尝试解决方案 问题描述 从git远程仓库clone了一个springboot项目, 然后项目的pom.xml文件的依赖全部加载失败,全部是Project 某某某依赖 not found 的错误,几十条 代码就更不用看了,只要用到依赖,全部报错. 看着报错就头大 尝试解决方案 检查maven配置是否正确 检查是…

国内首个多主架构方案发布:数据库产业生态的一次开放式升维

文 | 智能相对论 作者 | 叶远风 作为数字化变革最仰仗的基础设施之一&#xff0c;数据库的建设已经成为当下的热点。 长期以来&#xff0c;通过数据库的自主创新来保证数据基础设施的安全可控&#xff0c;一直是业界以及众多行业客户的普遍愿望。 但是&#xff0c;这一进程…

TP4056充电管理芯片使用详解

一.芯片简介 TP4056充电管理芯片是一款常用的单节锂电池恒定电流/恒定电压线性充电管理芯片。 内部电路框图如下&#xff1a; 芯片采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0c;无需增加外部隔离二极管。热反馈可对充电电流进行自动调节&#xff0c;以便在…

【Docker】error pulling image configuration: download failed after attempts=6: dial tc

问题&#xff1a;在学习Docker的时候遇到pull失败的情况 解决方法&#xff1a; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"] } EOF sudo systemctl daemon…

【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 1 版本环境2 构建步骤1 准备文件夹结构2 运行 CMake3 在 Visual Studio 中构建4 安装 VTK5 再次在 Visual Studio 中构建6 添加环境变量 3 测试是否…

基于妙记多 Mojidoc 剪藏内容和内容创建的工作流程

早在我开始创作之前&#xff0c;我就是一个信息消费者——收集想法和想法&#xff0c;但不对它们做任何事情。这给了我很多创建信息捕获和综合系统的经验。直到现在&#xff0c;我才有了适当的方法来分析我是如何做到的… 这是一个工作流程&#xff0c;可以在较多杂乱信息中增…

【Java】面向对象基础 之 静态字段和静态方法

1、静态字段 在一个class中定义的字段&#xff0c;我们称之为实例字段。实例字段的特点是&#xff0c;每个实例都有独立的字段&#xff0c;各个实例的同名字段互不影响。 还有一种字段&#xff0c;是用static修饰的字段&#xff0c;称为静态字段&#xff1a;static field。 …

Kkfileview | Docker | +Redis文件预览kkfile配置

文章目录 简介DockerRedis部署 简介 kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 …

【Excel导出文件】

文章目录 课程内容1. 工作台1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码导入1.2.1 Controller层1.2.2 Service层接口1.2.3 Service层实现类1.2.4 Mapper层 1.3 功能测试1.3.1 接口文档测试1.3.2 前后端联调测试 2. Apache POI2.1 介绍2.2 入门案例2.2.1 将数据写…

微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明

微信小程序中的条件渲染和列表渲染 1. 条件渲染1.1. 语法格式 (wx:if, wx:elif ,wx:else)1.2. block标记1.3. hidden属性1.4. wx:if 与 hidden 的对比 2. 列表渲染2.1. wx:for 语法格式 及 wx:key的使用 1. 条件渲染 1.1. 语法格式 (wx:if, wx:elif ,wx:else) <view wx:if…