C++的标准输出和读写文件
2017-10-20 19:04
239 查看
作为第一篇博客,本想写点对深度学习的理解, 但是基于码农的考虑,还是先写“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++标准库 为我们做了一部分事情, 有很多事情还是需要自己来做。
仔细思考,很多事情都是类似的, 与一反三。
写文件和标准输入 与之类似,就不在这废话了。
说一说标准输入输出和文件读写的相似和不同吧, 请看下面代码:
#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操作 ,都需要经过三步, 打开一个流, 流与一个目标关联, 输出流。
请看下面的异同之处:
标准输出 | 文件操作 | |
流对象创建 | 库已经声明cout对象 | 自己通过ofstream声明输出流对象 |
流关联 | cout默认关联到显示器 | 自己通过open方法进行关联 |
输出流 | 使用<< | 使用<< |
因为可以打开多个文件,就需要创建多个流, 所以需要我们自己声明流对象, 库文件不可替我们声明, 因为他不知道要声明多少个;
因为输出的文件不同, 所以关联需要我们自己做,因为库文件不知道我们的输出位置。
仔细想想, 其实每一步操作都是有意义的, C++标准库 为我们做了一部分事情, 有很多事情还是需要自己来做。
仔细思考,很多事情都是类似的, 与一反三。
写文件和标准输入 与之类似,就不在这废话了。
相关文章推荐
- Unicode(UTF16)文件读写终极方案---用C++标准的字节流读取,转化为宽字符(wchar_t),再以字节流写入
- C++ 读写文件,格式化输出到文件的简单代码
- (转载)你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?
- Unicode(UTF16)文件读写终极方案---用C++标准的字节流读取,转化为宽字符(wchar_t),再以字节流写入
- C/C++-标准输入/输出重定向为文件输入/输出
- C++ 文件读写 字符输出 字符串输出
- C++文件读写 实现文件每行数据齐长输出
- 在C和C++中把标准输出重定向到指定文件
- Unicode(UTF16)文件读写终极方案---用C++标准的字节流读取,转化为宽字符(wchar_t),再以字节流写入
- 利用C++标准符号,把调试信息输出到文件
- 你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?
- 标准c++ 读写unicode文件
- python入门(四):标准输出和文件读写
- C++语法基础--标准IO库--文件的输入和输出(fstream,ifstream,ofstream)
- C++标准读写文件
- C例程:文件读写 拷贝 标准输入输出等
- C++中cout控制输出格式和读写txt文件
- C++读写文件
- C++读写INI配置文件
- 文件读写——C++