C++ 头文件系列(istream)
1. 简介
其实叫它istream有点不合适,因为该头文件不仅定义了istream
,还定义了iostream
。
2. basic_istream模版
basic_istream继承自basic_ios,也是其它输入流的基类。
2.1 sentry类
The class sentry defines a class that is responsible for doing exception safe prefix and suffix operations.
sentry是哨兵的意思,标准给出的解释是,这个类是为了做一些异常安全的前置和后置工作。 所有格式化输入函数在执行前都会构造一个sentry对象,如果该对象构造成功,这些函数会继续执行; 否则,格式化函数会根据情况设置badbit位,并抛出异常。
2.2 格式化输入函数
- operator >> : 该运算符有多个重载版本,分别定义了包括bool、short、unsigned等在内的多个格式化输入。 但注意,这些函数不包括对char有关类型的重载(但C++14好像有)。
2.3 非格式化输入函数
- gcount : 返回上一次非格式化函数提取的字符数。
- get : 提取字符。
- getline : 提取一行字符。
- ignore : 提取并且放弃字符。
- peek : “peek”下一个字符,不提取。
- read : 提取一块字符。
- readsome : 提取内部流缓冲区存有的字符。
- putback : 放回最近提取的一个字符。
- unget : “un-get”一个字符。
2.4 流定位函数
- tellg : 返回输入流当前字符的当前位置。
- seekg : 设置输入流的当前位置。
2.5 同步函数
- sync : 这个函数有点难理解,它的内部调用顺序是
istream::sync
->basic_streambuf::pubsync
->basic_streambuf::sync
。 因此要从底层函数的语义去理解它:将缓冲区的内容与关联的字符流同步。 因此,如果是标准输入流,则是将缓冲区的内容清空,保持与键盘输入的同步; 如果是文件流,则是将缓冲区内容与文件内容同步。
3 basic_iostream模版
该模版只是简单地多继承了basic_istream和basic_ostream,并定义了几个protected的移动赋值运算符和swap成员函数。
4 manipulators
- ws : 在当前位置提取white-space。
5 typedefs
typedef basic_istream<char> istream
typedef basic_istream<wchar_t> wistream
typedef basic_iostream<char> iostream
typedef basic_iostream<wchar_t> wiostream
C++ 头文件系列(istream)的更多相关文章
- C++ 头文件系列(iterator)
简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...
- C++ 头文件系列(iostream)
1. 简介 这个头文件非常特殊,它只声明了8个常用流对象. 2. 8个对象 2.1 窄字符对象(char) extern istream cin extern ostream cout extern ...
- C++ 头文件系列(array)
注意,该头文件仅在C++11中标准才开始出现. 简介 与语言内置的数组一样, array类模版支持几乎所有内置数组包含的特性: 顺序的(sequence) 内存连续的(contiguous stora ...
- C++ 头文件系列(queue)
简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的 ...
- C++ 头文件系列(stack)
简介 该头文件只含有一个类模版stack, 它实现栈的概念,是一个容器适配器(说实话,在写这篇随笔之前我都不知道有这么个类模版). 栈 栈只有一个重要的特性: LIFO(last-in first-o ...
- C++ 头文件系列(vector)
简介 vector头文件包含vector的类模版以及该模版的显示特化版本vector< bool >. vector是C++容器库中非常通用的一种容器,如果你不知道该决定使用哪一种容器,或 ...
- C++ 头文件系列(map)
简介 该头文件包含两个概念相似的容器----map.multimap. 而这两个容器反映的概念就是 映射. 这两个容器 相同 的属性有: 关联性 映射 动态增长 键(Key)唯一性 这两个不相同的属性 ...
- C++ 头文件系列(unordered_map、unordered_set)
简介 很明显,这两个头文件分别是map.set头文件对应的unordered版本. 所以它们有一个重要的性质就是: 乱序 如何乱序 这个unorder暗示着,这两个头文件中类的底层实现----Hash ...
- C++ 头文件系列 (algorithm)
简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...
随机推荐
- POJ3723最小生成树
题意:从一个起点出发连接男孩子和女孩子,若是两者之间有连接的,则花费为10000-d,若是没有连接的则花费为10000 分析:很显然是一个最小生成树,但是我们希望的是d越大越好,因为d越大,10000 ...
- C# GridView Edit & Delete, 点击Delete的时候弹出确认框
1. 使用GridView自带属性ShowEditButton和ShowDeleteButton,均设为True <Columns> ... <asp:CommandField S ...
- USB那点事3 -使用端口2作为custom HID的传输(转)
源:USB那点事3 -使用端口2作为custom HID的传输 USB custom HID例子中是使用了端口1作为通信,那么现在我使用端口2作为通信端了,该如何修改呢?如下所示: 首先修改:usb_ ...
- 路由器、交换机学习之IP地址、使用网络掩码划分子网
局域网子网划分 对于C类IP地址来说(192.168.1.X,其中前面的192.168.1为网络号,后面的X为主机号,这样的网络中可以有254台主机,其中.0为局域网地址,.255为广播地址)进行子网 ...
- 部分网站允许空白referer的防盗链图片的js破解代码
Reference: http://www.114390.com/article/27125.htm Javascript源码: 复制代码代码如下: function showImg( url ) { ...
- 代码中引用res里的颜色、图片
1.imageButton userImgButton 在代码中设置图片,使用res/Drawable 里的图片 Resources res = getResources(); Bitmap inDr ...
- 反射机制(实例化Class)对象
反,就是利用对象找到对象的出处 Object类中有一个方法,getClass() Date date = new Date(); System.out.println(date.getClass()) ...
- Java解析JSON文件的方法 (二)
assets文件夹资源的访问 assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件. 1. 先在Activity里面调用g ...
- Git Flow——Git团队协作最佳实践
规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...
- Dictionary使用(转)
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib)2.描述 1).从一组键(Key)到一组值(Value)的 ...