C++程序设计POJ》《WEEK7 输入输出和模板》《二进制文件读写》《
二进制读文件 ifstream fstream? 读 ofstream fstream 写 inFile.gcount();//看刚才读了多少个字节 比如快到文件末尾,如果最后只剩8个字节,却要读10个字节,最后只会读8个字节 fstream东西比较全 ‘ ’ 为什么存成.dat格式?比纯文本节省空间,空格也占空间,纯文本是字符串格式 10亿,10个字节,.dat 一个int 4个字节搞定 Jane 本来后面就有个 Mike 内存缓冲区?? 二进制文件和文本文件的区别 ? 二进制读文件 二进制写文件: /* 二进制文件读写 ? 在文件中写入和读取一个整数 */ #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_2019week7Project4Project4students.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 */ 函数模板 编译器由模板生成函数的过程称为模板的实例化 也可以 不通过参数实例化函数模板 函数模板可以重载 函数模板和函数的次序 匹配模板函数时,不进行类型自动转换 ? 如果懒得写很多很像的函数 那就写一个函数模板 如果懒得写很多很像的类 那就写一个类模板 ? ? ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |