STL(三)C++ I/O流技术
来源:互联网 发布:建筑施工图设计软件 编辑:程序博客网 时间:2024/06/10 03:11
C++标准模板库中,提供了一组模板类和相应的具现类,来支持面向对象的数据输入输出功能,如基本的输入输出流istream类/ostream类/iostream类和文件输入输出流ifstream类/ofstream类/fstream类等。
一、I/O流类
使用C++的I/O流类,需要用宏语句"#include <iostream>" or "#include <fstream>"。
由于支持单字节和多字节的字符数据读写,C++通过模板类来定制I/O流类
如下图:
- 首先是最底层的模板类basic_streambuf,具有基本的缓存处理功能。其他模板类是basic_streambuf类的友员类,以利用它的底层读写功能进行操作。
- 接下来是ios_base类,提供基本的读写格式设置,读写状态和错误检测功能,是一个非模板类,其他模板类实际是从它派生出来。
- basic_ios在ios_base类基础上将字符特性考虑进来,提供基本的字符数据输入输出处理。
- basic_istream, basic_ostream以及同时支持读写的basic_iostream,提供更确切的流数据的读写功能
- 用于文件数据读取的basic_ifstream,数据写入的basic_ofstream以及可读写的basic_fstream,并使用了basic_streambuf模板类进行缓冲处理
- C++通过具现以上I/O流的模板类,提供了便于应用的单字节和多字节的I/O流类,包括单字节的流类ios,istream,ostream,iostream,ifstream,ofstream and fstream,多字节的流类wios,wistream,wostream,wiostream,wifstream,wofstream and wfstream。
二、标准输入输出
为简化控制台的键盘和屏幕I/O处理,C++提供了4个内建的单字节处理的流对象cin(默认键盘输入), cout(默认屏幕输出), cerr(标准错误输出流对象,默认屏幕) and clog(带缓冲的标准日志输出流对象,默认屏幕), 以及对应的4个双字节处理的流对象wcin, wcout, wcerr and wclog
这些内建流对象在程序执行时就被分别调用istream and ostream流类的函数进行创建和初始化,并作用于早已由C提供出来的充当文件指针的stdin标准输入,stdout标准输出、stderr标准错误。
三、文件输入输出
文件读写所用到的很多常数都在基类ios中被定义出来。
(1)文件 打开:二进制模式按字节进行读写,不作任何数据转换,数据不会丢失
(2)文件 关闭:
(3)文件读写:1、利用重载操作符“<<”和“>>”读写;2、读写一个字符,ifstream& get(char& c),oftream& put(char& c);3、读写多个字符,read and write;4、随机读写,seekg and seekp,可移动文件的读写指针来读写。
四、流的格式控制
对于流数据的输入输出模式,C++提供两种不同的控制方式,一种是使用ios_base类提供的setf, width等,另一种是操作符“<<”和“>>”以及流模式控制对象
(1)用函数设置或复位格式:查看fmtflags setf(fmtflags flag)函数的使用
#include <iostream>using namespace std;int main(void) { //科学计数方式显示,大写“E“ cout.setf(ios::scientific | ios::uppercase); cout << 2006.5 << endl; //2.006500E + 03 return 0;}(2)用重载“<<”或“>>”操作符设置流格式
//使用流格式控制对象#include <iostream>#include <iomanip>using namespace std;int main(void) { //设置域宽 cout << setw(20) << "hello" << endl; //设置精度 cout << setprecision(4) << 2006.536 << endl; //设置填充字符 cout << setw(2) << setfill('*') << "baby" << endl; cout << scientific << 300.89 << endl; cout << oct << 9 << endl; cout << dec << showpos << 173 << endl; //取消正号显示 cout << noshowpos << 192 << endl; cout << boolalpha << true << endl; return 0;}
小结:C++提供了十分完善的流类和内建的流对象,支持面向对象的设备IO操作。
参考<<C++ STL技术开发引导>>
- STL(三)C++ I/O流技术
- C++I/O技术
- I/O流(三)
- I/O流技术
- Java I/O 技术(三)—— 操作 字符流 的对象
- java I/O流学习(三)
- c++I/O流
- linxu C 学习笔记(三):标准I/O库
- C++ I/O流技术
- I/O流类库(三)
- Java I/O 技术(十)—— I/O 功能流对象(一)
- Java I/O 技术(十一)—— I/O 功能流对象(二)
- C I/O流总览
- linux系统I/O复用技术之三:epoll()
- STL(一)C++编程技术
- STL(二)C++模板技术
- C++常用I/O流技术
- I/O多路复用技术(multiplexing)
- 06:浮点数向零舍入
- 【转载】知道创宇研发技能表3.1
- Spark Streaming整合kafak
- Python搭建插件式框架(基于组件开发)【转】
- Git创建远程分支步骤
- STL(三)C++ I/O流技术
- Git详解之七 自定义Git
- ajax请求内部实现
- iOS内购流程文档-Lion
- 设置excel 满足条件的单元格变色
- python之os模块
- [Java多线程 八]---JUC包下的锁和工具类
- SQL Server数据库安全设置
- Tensorflow模拟简单线性模型小栗子