C++的标准输出和读写文件
来源:互联网 发布:淘宝卖家售假被扣48分 编辑:程序博客网 时间:2024/06/10 01:15
作为第一篇博客,本想写点对深度学习的理解, 但是基于码农的考虑,还是先写“hello word”的一些思考吧。
说一说标准输入输出和文件读写的相似和不同吧, 请看下面代码:
#include<iostream> int main() { std::cout<<"hello world!"<<std::endl; return 0; }
这是所有程序员都会经过的入门级程序, 但 我想思考几个问题:
问题1, 为什么要包含iostream头文件?
问题2, std::cout是个什么东西?
问题3, std::endl是个什么东西?
问题4, <<是个什么东西?
初步分析下程序的内容:
C++的输入输出都是基于流的考虑,并有缓存区的概念; 输入流:istream; 输出流:ostream;
C++的库文件中 定义了streambuf类,为缓存器分配内存, 填充缓存区,访问缓存区,刷新缓存区,管理缓存区内存等类方法;
定义了ios_base类, 表示流的一般特征,是否可读取,二进制流还是文本流等;
定义了ios类, 基于ios_base类,其中包括一个指向streambuf对象的指针函数;
ostream类,从ios类派生而来,提供输出的方法;
istream类,从ios类派生而来,提供输入的方法;
iostream类, 基于istream和ostream(从名字也能看出来),因此继承了输入和输出的方法。
因此问题1的答案可知: 因为iostream头文件中 包含了输入和输出的方法, 我们可以用来输出我们的内容。
我们知道C++都是基于对象的操作, 可想而知 cout 则是 ostream的对象, 而且是库给我们提前声明了,创建了ostream对象,则就打开了一个流,并创建了流的缓存区,和关联对象(cout默认关联到显示器), 有了缓存有了关联对象,我们可以直接调用输出的方法,将输出的内容 输出到显示器上。
可以猜到 << 就是重载的运算符, 能识别C++的所有基本类型, 将右侧的字符串 “hello world” 添加到缓存区中。 当然cout对象也有其他显示的方法,比如cout.put()用于显示字符,cout.write()用于显示字符串, 但不太常用。
说道std::endl 不得不说缓存区的刷新机制, 为了保证程序的运行速度, 一般在缓存区满了之后,一次将缓存区的内容写到屏幕或文件, 但有时需要提前输出, 则有几个方法,比如运行flush控制符, 还有一种方法 就是在碰到换行符时 也会刷新。
endl也是一个控制符,他的作用是: 刷新缓冲区,并插入一个换行符。
到目前为止, 4个问题基本回答完毕, 我们来看看文件操作,并比较下不同。
#include<iostream>#include<fstream>int main(){std::ofstream fout; //创建流对象fout.open("log.txt",std::ios::app|std::ios::binary); //关联流对象与输出目标fout<<"hello world!"<<std::endl; //调用输出方法 进行输出。return 0;}
文件操作与标准输入输出类似, fstream类继承了 文件输入类ifstream和文件输出类ofstream类的方法。
用ofstream类来声明一个对象,名称为fout, 此时 创建了缓存区;
对象的open方法, 则将一个流与目标关联上,表示输出的目标是log.txt文件;
使用重载符<<进行输出。
其实标准输出和文件操作是相似的,都是C++的IO操作 ,都需要经过三步, 打开一个流, 流与一个目标关联, 输出流。
请看下面的异同之处:
由上面的比较可知: 其实操作都是一样的,只是 标准输出 由库文件提前给我们做了两步而已, 所以叫做标准输出。 而文件操作,这三步都需要自己指定。
因为可以打开多个文件,就需要创建多个流, 所以需要我们自己声明流对象, 库文件不可替我们声明, 因为他不知道要声明多少个;
因为输出的文件不同, 所以关联需要我们自己做,因为库文件不知道我们的输出位置。
仔细想想, 其实每一步操作都是有意义的, C++标准库 为我们做了一部分事情, 有很多事情还是需要自己来做。
仔细思考,很多事情都是类似的, 与一反三。
写文件和标准输入 与之类似,就不在这废话了。
- C++的标准输出和读写文件
- 标准C文件读写
- C标准库读写文件
- 标准c语言库读写文件
- C和C++中的标准输出和标准错误输出
- Qt5菜鸟入门(3):文件的读写和输出
- linux输出·输入文件和标准输入 标准输出
- linux输出·输入文件和标准输入 标准输出
- 文件IO---标准输入、标准输出和标准错误
- C文件的读写
- C文件的读写
- 【C语言提高45】【文件操作API】----- 标准文件的读写
- 在C和C++中把标准输出重定向到指定文件
- 标准输入和标准输出的read_write
- 标准文件读写操作的函数
- 关于标准C文件流读写问题:fopen,fread,fwrite,fclose的一些注意事项
- [C/C++标准库]_[初级]_[读写中文路径的文件--写入unicode字符串]
- C标准库:以记录为单位的IO函数(文件读写)
- HDU-6015 Skip the Class
- ubuntu防火墙操作
- AndroidStudio 中开启Java8语法和Retrolambda库的使用
- 单链表的反转
- 如何新建java项目
- C++的标准输出和读写文件
- Effective C++ 3. Use const whenever posible
- 设计模式之二:Builder模式
- HDU-6019 MG loves gold
- ossec启动报ossec-remoted(1206): ERROR: Unable to Bind port错误解决方法
- Android中隐式跳转到系统设置界面(意图对象)
- (M)Backtracking: 93. Restore IP Addresses
- openjdk7 源码下载
- typora markdown 图片自动上传到图床