20210730
文件的操作: 对文件操作的方式:追加、创建、重写。。。;只读模式、只写模式;文本模式、二进制模式
ifstream \ ofstream: 等价于在文本文件和输入输出流中打开一条通道,流就是 他们的对象
二进制文件的读取:
文本文件和二进制文件的区别:将 \r\n 和 \n 进行一层转换.
电脑中的所有文件都是二进制的方式存储的。那么为什么会文本模式和二进制模式呢?
因为 在 windows 下面,每行结束的时候,最后面会有两个看不到的字符(回车\r、换行\n),windows 下面以回车换行为行结束的标志
linux下面,结束标志就是换行(\n)
windows:
使用读取文本文件的模式进行读取数据的时候, 读取到后面的\r\n之后,会自动将其转换为 \n 读到程序中
使用读取文本文件的模式进行写入文件的时候, 读取到后面的\n之后,会自动将其转换为 \r\n 写到文本中
linux 下面, 读取文件的模式,不管是二进制模式还是文本文件的模式, 没有区别.
二进制文件对象的序列化
打开文件的时候, 需要传入操作的模式: ios::app 追加的方式 ios::in 读取 ios::out 写入 ios::binary 二进制的方式进行读写
// 直接使用 ofstream write() 方法直接写 写二进制文件
ofstream osm(path, ios::out | ios::binary);
osm.write((char*)&p, sizeof(Person));
osm.close();
ifstream ism(path, ios::in | ios::binary);
Person p; // 创建一个空的对象, 写回到文件
ism.read((char*)&p, sizeof(Person));
STL: Standard Template Library 1、STL 是内置到编译器种得,因此不需要include 包含,直接使用即可 2、STL 是数据结构和算法分离了
教室是一个容器
学生就是一个元素
但是对于教室来说,教学楼成为了容器
容器的分类: 序列式容器:元素在容器中的位置,是由该元素进入容器的时间和地点决定的(位置 和 进入容器的时间和地点) 关联式容器:和先进后进没有关系。容器中的位置事先确定好了
迭代器: 就是一个指针==》可以 *, 可以 ++ 实际上是一个类对象,是因为类中重载了上面的操作符号。类封装了一个指针
算法:通过有限的步骤解决有限的问题
容器和算法的开发人员是不一样的,为了保证可以联合使用,容器需要提供一个外部使用的类型供外界来访问,这个就是迭代器:算法使用迭代器来操作容器内的数据
容器(带有迭代器) ---------------------迭代器 -------------------------- 算法
begin(): 开始的第一个元素 end(): 结束的位置。当begin 移动到 end 的位置,代表 容器中的数据被访问完成
begin \ end: 确定了数据的有效区间、一个数据的所占用的字节数
迭代器的数据类型名字:vector::iterator pBegin = v.begin();
容器遍历算法:
for_each(pBegin, pEnd, Function);
for(vector<int>::iterator pBegin = v.begin(); pBegin != v.end(); pBegin++){
}
|