七、输入/输出流--基于字符串的流---streambuf类
来源:互联网 发布:三菱plcfx3u编程软件 编辑:程序博客网 时间:2024/05/31 19:27
基于字符串的流
在头文件<sstream>
中,定义了4个类模板和6个类型,,都是和basic_string相关的流缓冲区类型;其功能是将流附着在string上,即通过流提过的格式化功能,从string中读取或者写入到string中,这样的流被称为stringstream
.
template< class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>> class basic_stringstream;
1 streambuf类
类模板basic_stringbuf定义为:
template < class charT, // basic_stringbuf::char_type class traits = char_traits<charT>, // basic_stringbuf::traits_type class Alloc = allocator<charT> // basic_stringbuf::allocator_type > class basic_stringbuf;
1.1 basic_stringbuf构造函数
//default (1) explicit basic_stringbuf (ios_base::openmode which = ios_base::in | ios_base::out);//initialization (2) explicit basic_stringbuf (const basic_string<char_type,traits_type,allocator_type>& str, ios_base::openmode which = ios_base::in | ios_base::out);//copy (3) basic_stringbuf (const basic_stringbuf&) = delete;//move (4) basic_stringbuf (basic_stringbuf&& x);
说明:
1. 前两个构造函数主要功能时构造基类basic_stringbuf的对象,并且初始化基类,使用参数which初始化模式;
2. 第三个: 禁止复制拷贝构造函数
3. 第四个: 右值构造函数
1.2 basic_stringbuf成员函数
//get (1) basic_string<char_type,traits_type,allocator_type> str() const;//set (2) void str (const basic_string<char_type,traits_type,allocator_type>& str);
说明:
1. 一个是get函数,一个是set函数功能
2. str()功能就是获取字符串缓冲区的内容,或者初始化输入、输出序列;
3. 第一个:返回一个basic_string对象,其中包含流缓冲区中当前内容的副本。
4. 第二个:将str设置为流缓冲区的内容,丢弃任何先前的内容。该对象保留其打开模式:如果这包括ios_base::ate,则put指针(pptr)将移动到新序列的末尾。
1.3 basic_stringbuf重载的虚函数
重载了6个虚函数
//(1)int_type underflow();//(2)int_type overflow (int_type c = traits_type::eof());//(3)int_type pbackfail (int_type c = traits_type::eof());//(4)pos_type seekpos (pos_type pos, ios_base::openmode which = ios_base::in | ios_base::out);//(5)pos_type seekoff (off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out);//(6) basic_streambuf* setbuf (char_type* s, streamsize n);
说明:
1.3.1 underflow()函数
虚函数underflow()将参数指定的字符放入输入缓冲区,如果可能有以下情况:
(1). 如果输入序列的当前位置有效,并且
traits::eq_int_type(c,traits::eof())返回false,
:说明c不是文件终止字符- 并且
traits::eq(to_char_type(c),gptr()[-1])
返回true, - assigns gptr()-1 to gptr()
这三个条件成立,函数返回字符c
(2).如果traits::eq_int_type(c,traits::eof())返回false,
并且输入序列当前位置有效,模式为输出(ios::out)时候,指定字符给*(–gptr()),函数返回traits::not_eof(c);
总结: traits::eof()表明函数调用失败
1.3.2 overflow()函数
成员函数overflow()功能: 将参数指定的字符c送入输出缓冲区,有下面的几种情况:
(1). 当traits::eq_int_type(c,traits::eof())返回false,并输出缓冲区当前位置有效,函数会调用sputc(c),调用成功,返回字符c;
(2). 如果traits::eq_int_type(c,traits::eof())返回true,并且没有字符被添加,函数调用成功时,返回一个数值,调用失败,返回traits::eof()
1.3.3 其他函数
- seekoff()功能时:在两个缓冲区中。改变流的位置;
- seekpos()功能类似;
- setbuf():设置缓冲区
- 七、输入/输出流--基于字符串的流---streambuf类
- 七、输入/输出流-- 七、输入/输出流--基于字符串的流---basic_istringstream 模板
- 七、输入/输出流--基于字符串的流---basic_ostringstream模板
- 七、输入/输出流--基于字符串的流---basic_stringstream模板
- 七、输入/输出流--基于文件的流
- 七、输入/输出流--streambuffer类介绍--
- 字符串输入/输出流类stringstream
- 七、输入/输出流--streambuffer类介绍--缓冲区迭代器
- 七、输入/输出流--streambuffer类介绍--自定义缓冲区
- 七、输入/输出流--iostream简介
- 七、输入/输出流---随机访问
- c++ 流对象之streambuf
- 字符串的输入、输出
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--未格式化输入和输出函数
- 输入流 输出流 字符串 相互转换
- 17.工具类,读取输入流Inpustream输出字符串
- 字符串的输入与输出
- 字符串的输入与输出
- 线程池(实现多线程的第三种方式)
- STM32晶振8M改12M方法
- Qt 5.9.1 在Windows下部署小工具、企业级应用总结
- pycharm破解方法
- 自己记录四舍五入,并且格式化
- 七、输入/输出流--基于字符串的流---streambuf类
- 【C】初学习之错误处理——非局部跳转<setjmp.h>
- BLDC无刷电机在离心机上面的应用
- 基于Android DataBinding的BindingAdapter实现密码字符*的回显
- tomcat启动出错排查
- Redis报错——MISCONF Redis is configured to save RDB snapshots
- Java并发编程:volatile关键字解析
- soj1087_贪心
- JS延迟加载的方式