I/O 输入/输出 库
流:字符序列
输入流:将数据输入到输入流中
输出流:将输出流的缓冲输出
IO运算符
- >>从左侧输入流对象读取到右侧数据
- <<从右侧数据写入到左侧输出流对象
头文件
#include <io.h>
#include <iostream>
#include <windows.h>
#include <fstream>
#include <filesystem>
#include <sstream>
#include <string>
输入输出流类型对象
注意:IO对象不可以拷贝和赋值
IO流可能发生错误,一旦错误状态,后续的IO操作都会失败,因此一般将它当作条件语句使用,保证有效状态
-
iostream标准流
- cin标准输入:读取控制台数据到istream中
- cout标准输出:将ostream的缓冲区数据,输出到控制台
-
fstream文件流
- ifstream:读取文件到istream中
- ofstream:将ostream的缓冲区数据,输出到文件
- 操作:
- 初始化:fstream f; || fstream f(s) || fstream f(s,mode) :
- s为文件名,默认调用open(),s可以为string或指向c风格字符串的指针
- mode:文件模式:std::ios::
- in:只读,仅对输入流
- out:只写,仅对输出流,默认截断,需要同时指定app模式
- app:写操作前,定位到文件末尾,当out被设定
- ate:打开文件后,定位到文件末尾
- trunc:截断(之前的清空)文件,当app被设定
- binary二进制方式
- open(s)打开名为s的文件,与文件流绑定,注意,如果要绑定另一个文件,首先要关闭
- close()关闭文件,与文件流解绑
- is_open()如果成功打开与流关联的文件,返回true
- 可以用getline(if,str)从if文件流读取数据,保存到string中
-
sstream字符串流
- istringstream:读取string到istream中
- ostringstream:将ostream的缓冲区数据,输出到string
- 操作:
- sstream s || sstream s(str) 将拷贝的str与字符流绑定
- s . str() 返回绑定的拷贝
- s. str(str) 拷贝str,赋值操作
绑定输入输出流
输出流缓冲区
- 每个输出流都管理一个缓冲区,目的将多个多个输出操作组合为一个,提高效率
- 显示刷新缓冲区:
- endl:添加/n,再刷新
- flush:直接刷新
- ends:添加空格,再刷新
- unitbuf:之后每次写操作都会刷新缓冲区
enum:
将整形常量const组织在一起,为字面值常量类型
enum不限定作用域,枚举成员作用域与枚举本身作用域相同,可以通过::访问成员,当在同一个作用域内,可以直接访问
enum class | enum struct 限定作用域,枚举成员在枚举的作用域外不可访问,因此只能通过::访问成员,
初始化 | 赋值 枚举对象:枚举类型对象 = 枚举名::成员名(必须用枚举成员初始化枚举对象)
可以通过枚举名 : type 指明枚举类型,对于enum存在足够大的内存存储,对于enum class默认为int
我们可以仅声明不定义(前置声明)枚举:对于enum必须指定类型,对于enum class默认为int
注意:枚举声明和的定义的类型必须匹配,并且在同一作用域不能声明同名的enum和enum class