二进制读文件
ifstream fstream 读
ofstream fstream 写
inFile.gcount();//看刚才读了多少个字节
比如快到文件末尾,如果最后只剩8个字节,却要读10个字节,最后只会读8个字节
fstream东西比较全
‘\0’
为什么存成.dat格式?比纯文本节省空间,空格也占空间,纯文本是字符串格式
10亿,10个字节,.dat 一个int 4个字节搞定
Jane 本来后面就有个\0
Mike
内存缓冲区
二进制文件和文本文件的区别
二进制读文件
ifstream
和 fstream 的成员函数:
istream& read (char* s, long n)
将文件读指针指向的地方的 n 个字节内容,读入到内存地址 s ,然
后将文件读指针向后移动 n 字节 以 ios ::in 方式打开文件时,文件读指
针开始指向文件 开头 。
二进制写文件:
ofstream
和 fstream 的成员函数:
istream& write (const char* s, long n);
将内存地址
s 处的 n 个字节内容,写入到文件中写指针指向的位置,
然后将文件写指针向后移动 n 字节 以 ios::out 方式打开文件时,文
件写指针开始指向文件开头 , 以 ios::app 方式打开文件时,文件写
指针开始指向文件尾部 。
/*
二进制文件读写
在文件中写入和读取一个整数
*/
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream fout("some.dat", ios::out | ios::binary);
int x = 120;
fout.write((const char*)(&x), sizeof(int)); //将内存地址x的内容,写到文件指针所指向的位置
fout.close();
ifstream fin("some.dat", ios::in | ios::binary);
int y;
fin.read((char*)&y, sizeof(int)); // 读到内存地址 y
fin.close();
cout << y << endl;
return 0;
}
/*
从键盘输入几个学生的姓名的成绩,并以二进制文件形式保存
*/
#include<iostream>
#include<fstream>
using namespace std;
struct Student
{
char name[20];
int score;
};
int main()
{
Student s;
ofstream OutFile("E:\\C++_POJ_2019\\week7\\Project4\\Project4\\students.dat",
ios::out | ios::binary);
while (cin >> s.name >> s.score)
OutFile.write((char*)&s, sizeof(s));
OutFile.close();
return 0;
}
/*
输入:
Tom 60
Jack 80
Jane 40
^Z+回车
*/
/*
将 students.dat 文件的 Jane 的名字改成 Mike
*/
#include<iostream>
#include<fstream>
using namespace std;
struct Student
{
char name[20];
int score;
};
int main()
{
Student s;
fstream iofile("students.dat", ios::in | ios::out | ios::binary);
if (!iofile)
{
cout << "error";
return 0;
}
iofile.seekp(2 * sizeof(s), ios::beg);// 定位写指针到第三个记录
iofile.write("Mike", strlen("Mike") + 1);
iofile.seekg(0, ios::beg); // 定位读指针到开头
while (iofile.read((char*)&s, sizeof(s)))
cout << s.name << " " << s.score << endl;
iofile.close();
return 0;
}
/*
输出:
Tom 60
Jack 80
Mike 40
*/
函数模板
编译器由模板生成函数的过程称为模板的实例化
也可以 不通过参数实例化函数模板
函数模板可以重载
函数模板和函数的次序
匹配模板函数时,不进行类型自动转换
如果懒得写很多很像的函数 那就写一个函数模板
如果懒得写很多很像的类 那就写一个类模板






类模板




类模板与派生
类模板从类模板派生
•
类模板从模板类派生
•
类模板从普通类派生
•
普通类从模板类派生
类模板与友员函数
•
函数 、 类 、 类的成员函数作为类模板的友元
•
函数模板作为类模板的友元
•
函数模板作为类的友元
•
类模板作为类模板的友元




来源:https://www.cnblogs.com/focus-z/p/11147632.html