C++的I/O(vc版)(四)_uflow和underflow的区别-程序员宅基地

技术标签: c++  io  c++学习  

下面进行我们的第二大类,流缓冲类。stream并不负责写或者读,毕竟如它原本的目的一样:负责格式化,存储格式化信息;当然我们还用它存储状态信息等等。stream把它的读写工作转交给stream buffer,即缓冲区类。


缓冲区类主要是围绕着位置展开操作,下面先介绍一个与位置有关的类:

/*fpos:它可以存储还原任何流中的任意文件的位置指示器所需的所有信息
 * 对象的类 fpos <St> 有效地存储至少两个成员对象:
 *字节偏移量,类型的 streamoff。
 *转换状态,供使用的类 basic_filebuf,对象类型的 St,通常是mbstate_t。
 * 它还可以存储任意文件的位置,以供类的对象 basic_filebuf,类型的fpos_t。 
 *对于具有有限的文件大小,但是,环境streamoff和fpos_t有时可以互换使用。 
 *对于不具有依赖于状态的编码的流的环境mbstate_t实际上可能是未使用。
 */

#define _Longlong   __int64
typedef _Longlong  streamoff;
typedef _Longlong  streamsize;
typedef __int64  fpos_t;
#define _FPZ   0
#define _FPOSOFF(fp) ((long)(fp))
//定义fpos
template<class _Statetype>
class fpos//store arbitrary file position
{
	typedef fpos<_Statetype> _Myt;
private:
	static const _Statetype _stz;//initail conversion state
	streamoff _myoff;//stream offset
	fpos_t  _fpos; //c file position
	_Statetype _mystate; //current conversion state
public:
	fpos(streamoff _off=0)
		:_myoff(_off),_fpos(_FPZ),_mystate(_stz)
	{//construct with stream offset
		//可以进行隐式转换
	}
	fpos(_Statetype _state,fpos_t _fileposition)
		:_myoff(0),_fpos(_fileposition),_mystate(_state)
	{
		//construct with conversion state and c file position
	}
	//此处采用了I/O接口中经常使用的策略,无参数时返回,有参数时设置
	_Statetype state() const
	{//return conversion state
		return (_mystate);
	}
	void state(_Statetype _state)
	{//set conversion state
		_mystate=_state;
	}

	fpos_t seekpos() const
	{
		return (_fpos);
	}

	operator streamoff() const
	{//return offset
		return (static_cast<streamoff>(_myoff+_FPOSOFF(_fpos)));
	}
	//至此streamoff和fpos的相互转化以全部完成
	streamoff operator-(const _Myt& _right) const
	{
		return(static_cast<streamoff>(*this)-static_cast<streamoff>(_right));
	}
	//遵循了+,-,+=,-=的定义法则,具体见《more effective c++》
	_Myt& operator+=(streamoff _off)
	{//add offset
		_myoff+=_off;
		return (*this);
	}
	_Myt& operator-=(strteamoff _off)
	{//subtract offset
		_myoff-=_off;
		return(*this);
	}
	_Myt  operator+(streamoff _off) const
	{
		_Myt _tmp=*this;
		return (_tmp+=_off);
	}
	_Myt operator-(str
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangyanphp/article/details/10392349

智能推荐

数据结构-Hash(哈希)基本特征_hash数据结构-程序员宅基地

文章浏览阅读878次,点赞22次,收藏19次。HashMap的实现原理是先要找到要存放数组的下标,如果是null的就存进去,如果不是null的就先判断key值是否一样,如果一样就替换,如果不一样就以链表的形式存在链表中(从JDK8开始,根据元素数量选择使用链表还是红黑树存储。例如上面存放7,8,9时,7直接存入索引为0的位置。8本来应该存到索引为1的位置,但是已经满了,所以向后找,索引3的位置为null,所以8存到索引3的位置,同理9存到6的位置。元素时,会先将目标位置前后的空间搜索一下,将标记为null的位置回收掉,这样大部分不用的位置就收回来了。_hash数据结构

linux配置的jmeter环境变量_linux配置jmeter环境变量-程序员宅基地

在CentOS 7系统中配置非root用户的jmeter环境变量,通过编辑.bash_profile文件并添加export JMET命令来配置。确保配置生效后,可通过java -version命令查看java版本信息。参考链接:知乎和程序员宅基地。

L2-039 清点代码库 - java_l2-039 清点代码库 java-程序员宅基地

文章浏览阅读7.6k次。L2-039 清点代码库 (25 分)Java (javac)时间限制1500 ms内存限制128 MBPython (python3)时间限制1500 ms内存限制64 MB其他编译器时间限制500 ms内存限制64 MB上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。”这里我们把问题简化一下:首先假设两个功能模_l2-039 清点代码库 java

PTA:完全二叉搜索树 (25 分)_完全二叉搜索树 分数 10 作者 陈越 单位 浙江大学 一个无重复的非负整数序列,必定-程序员宅基地

文章浏览阅读922次,点赞2次,收藏6次。题目详情:一个无重复的非负整数序列,必定对应唯一的一棵形状为完全二叉树的二叉搜索树。本题就要求你输出这棵树的层序遍历序列。输入格式:首先第一行给出一个正整数N(≤1000),随后第二行给出N个不重复的非负整数。数字间以空格分隔,所有数字不超过 2000。输出格式:在一行中输出这棵树的层序遍历序列。数字间以 1 个空格分隔,行首尾不得有多余空格。输入样例:101 2 3 4 5 6 7 8 9 0结尾无空行输出样例:6 3 8 1 5 7 9 0 2 4..._完全二叉搜索树 分数 10 作者 陈越 单位 浙江大学 一个无重复的非负整数序列,必定

[2020.8.3]联想 ZUK Z1 Magisk ROOT 纯净无推广 一键刷机 ZUI_-程序员宅基地

文章浏览阅读72次。教程本刷机包比一般的大,是因为同时适配recovery卡刷和酷卓一键刷机。但是刷进系统后和普通刷机包都是一样的。注意事项(务必细读) 联想 ZUK Z1 免解锁BL(bootloader),一键ROOT是保资料的,刷机是会清空数据的(无论如何都请备份重要数据)卡刷方法卡刷需要已经安装了twrp recovery,直接传入手机后用twrp recovery刷机,和普通刷机包使用无区别..._zukz1被root了怎么办

数据结构与算法分析 3.26 — 双端队列的实现-程序员宅基地

文章浏览阅读590次。一、题目 编写支持双端队列的例程,插入与弹出操作均花费 O(1)时间二、解答 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。 基本操作:在双端队列两端插入与删除。 ADT术语: ..._编写算法实现双端队列。数据结构分析

随便推点

STM32F4上CCM内存的使用小结_ccmram-程序员宅基地

文章浏览阅读4.6k次,点赞9次,收藏58次。一、CCM内存介绍相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM 不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系统架构)。只能通过 CPU 对其进行访问(dma等外设不能访问)。二、用法(基于MDK)1、自动分配法(不建议使用)设置完后,若重新编译,map文件里就会有这块SRAM的资源分配——由于IRAM1优先使用,而且一般SRAM1够用,就不会给它分配资源。2..._ccmram

multi-head attention 是什么-程序员宅基地

文章浏览阅读382次。Multi-head attention 是一种在深度学习中的注意力机制。它在处理序列数据时,通过对不同位置的特征进行加权,来决定该位置特征的重要性。Multi-head attention 允许模型分别对不同的部分进行注意力,从而获得更多的表示能力。这在自然语言处理中,特别是在处理长文本时,可以显著提高模型性能。..._multi-head attention是什么

linux上修改php.ini配置添加扩展时不生效_php.ini加入了extension 不生效-程序员宅基地

文章浏览阅读2.1k次。因初次编译安装php时没有开启openssl, 导致请求https网站报错, 为此需要手动编译openssl扩展然后添加到php.ini中. 问题就在自己明明已经编译安装生成openssl.so的步骤都没有错, 也已经将extension=openssl.so加入php.ini中,服务器也重启了, 但是无论是访问phpinfo()打印的出内容还是直接命令行php -m打印加载的模块都没有显示有加载..._php.ini加入了extension 不生效

linux中如何建立连接文件_linux建立文件链接-程序员宅基地

文章浏览阅读8.1k次。这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间..._linux建立文件链接

Kafka在Windows安装运行_kafak windows版-程序员宅基地

文章浏览阅读5.2w次,点赞27次,收藏102次。摘要:本文主要说明了如何在Windows安装运行Kafka_kafak windows版

formatter是什么?-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏11次。element里面表格的一个属性 formatter 叫格式化内容的_formatter

推荐文章

热门文章

相关标签