STL的流处理类学习
来源:互联网 发布:ubuntu装hadoop 编辑:程序博客网 时间:2024/06/05 10:56
概述
之前一直用STL提供的流处理类写一些代码,但也没有认真总结过,对于很多东西还是不理解,这两天看了一下做一些总结,总体的类图关系如下:
下面是借鉴网上的一张图,哪些类包含在哪里也写清楚了
这些流处理类大致可以分为三类:
1. iostream,主要是处理终端的输入输出,分为istream 和 ostream,是我们用的最多的,cin、cout、cerr都是内部定义的对象。
2. fstream,主要负责文件的读写操作,包括 ifstream、ofstream 和 fstream,但需要注意fstream是继承自iosstream的。
3. sstream, 主要负责字符串转换,可以替换scanf和printf,包括 stringstream、istringstream 和 ostringstream,注意stringstream也是继承自iostream的。
iostream
这个比较熟悉,先不累赘了。
fstream
文件流主要是读写文件,ifstream用来读文件,ofstream用来写文件,fstream可以读写。
我们可以在构造函数里面关联文件,也可以定义对象之后调用open打开,处理完成之后调用close关闭。
open或者使用带参数的构造函数的时候
ofstream oftest;
oftest.open("test",ios::binary);//对于ofstream如果第二个参数不传默认是ios::out,并且是text方式打开
打开文件的方式在iOS类(所以流式I/O的基类)中定义,有如下几种方式:
ios::in为输入(读)而打开文件ios::out为输出(写)而打开文件ios::ate初始位置:文件尾ios::app所有输出附加在文件末尾ios::trunc如果文件已存在则先删除该文件ios::binary二进制方式text方式和binary方式打开文件都是以一个字节为单位读取和写入的,但还是有区别的,主要区别是对于特殊字符的处理
1.text方式写入文件会将换行(/n)扩展成/r/n, 读文件时则自动转换回来
2.binary方式则不会作任何扩展,与读写内容一致
3.默认为text方式
2.binary方式则不会作任何扩展,与读写内容一致
3.默认为text方式
两个简单的例子
#include <iostream> // std::cout#include <fstream> // std::ifstreamint main () { std::ifstream iftest; iftest.open ("test.txt", std::ifstream::in); char c = iftest.get(); while (iftest.good()) { std::cout << c; c = iftest.get(); } iftest.close(); return 0;}
#include <fstream> // std::ofstreamint main () { std::ofstream ofs; ofs.open ("test.txt", std::ofstream::out | std::ofstream::app); ofs << " more lorem ipsum"; ofs.close(); return 0;}
关于文件流可以参考 C++文件读写详解(ofstream,ifstream,fstream)
sstream
关于sstream可以参考 【STL】ostringstream, istringstream, stringstream
strigstream, istringstream, ostringstream 可以在构造的时候传入string对象引用,也可以在定义之后调用str(string&)来绑定string。对于str()函数有三种用法:1)str()返回一个string内容的拷贝;2)str(string&)设置string内容,之前的内容会被丢弃;3)str("")清空内容
istringstream的默认分割符是空格,可以结构化一串以空格分开的数据,一个简单的例子
ostringstream是用来格式化输出
#include<iostream>#include<sstream>int main(){ istringstream istest; istest.str("aa bb 55"); string strtmp; while(istest >> strtmp) { cout << strtmp << endl; } return 0;}
ostringstream是用来格式化输出
#include<iostream>#include<sstream>int main(){ ostringstream ostest; ostest << 12.5 << "," << "abc" <<endl; cout << ostest.str(); return 0;}
0 0
- STL的流处理类学习
- STL学习笔记一:模版类属的特殊化处理.
- STL之map类的学习
- STL 的学习
- stl的学习
- effective STL的学习
- STL的学习
- 学习STL的笔记
- STL学习--vector的学习
- STL线程不安全的读写处理
- stl 对unicode的使用处理
- STL练习之字符串的处理
- STL的hasp_map学习笔记
- 2013.11.18 《STL的学习》
- 有效的STL学习记录
- STL::vector的源码学习
- STL关联容器的学习
- STL----链表类模板的学习
- NOIP 2010 解题报告(机器翻译,乌龟棋,关押罪犯,引水入城)
- 位运算
- Android Studio有关.9.png图片的使用
- CANOpen移植(CanFestival移植)
- POJ 1942-Paths on a Grid(组合数学-C(m+n,m))
- STL的流处理类学习
- 爬山算法、模拟退火算法
- unity操作android触屏移动代码
- Windows和Ubuntu平台Android +JAVA 环境搭建
- Java——IO流
- Git使用总结
- 第一次用阿里云服务器,结果不能通过ip访问到云服务器
- JAVA8 十大新特性详解
- CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32