实验六 模板类和文件I/O
实验任务三
#include <iostream> #include <fstream> #include <array> #define N 5 int main() { using namespace std; array<int, N> x {97, 98, 99, 100, 101}; ofstream out; out.open("data1.dat", ios::binary); if(!out.is_open()) { cout << "fail to open data1.dat\n"; return 1; } out.write(reinterpret_cast<char *>(&x), sizeof(x)); out.close(); }
#include <iostream> #include <fstream> #include <array> #define N 5 int main() { using namespace std; array<int, N> x; ifstream in; in.open("data1.dat", ios::binary); if(!in.is_open()) { cout << "fail to open data1.dat\n"; return 1; } in.read(reinterpret_cast<char *>(&x), sizeof(x)); in.close(); for(auto i = 0; i < N; ++i) cout << x[i] << ", "; cout << "\b\b \n"; }
当把task_2.cpp中line8的数组类型从int类型修改成char类型时,运行结果为:
原因:
write函数把一块内存中的一块内容写到一个文件输出流中,写入的时候是按字节块写入的,task_1.cpp中是写入了整数类型到文件中,一共写入了5个整数,一个整数占4个字节,所以写入了20个字节的内容。而read函数同样是将一个文件读字节到一个指定的存储器区域,由长度参数确定要读的字节数。而当task_2.cpp中line8的数组类型从int类型修改成char类型时,由于一个char类型只占一个字节,长度参数为5,所以read只读了文件20个字节数中前5个字节的内容。由于所给的五个整数都小于255,所以只需要一个字节便能存储,所以用于存储每个数的四个字节其中三个无内容,因此前五个字节只有第一个和第五个有内容,因此输出如图结果。
实验任务4
#pragma once #include<iostream> using namespace std; template<typename T> class Vector{ public: Vector(int size=0):size{size}{} Vector(int size,T value):size{size}{ p=new T[size]; for(int i=0;i<size;i++)p[i]=value; } Vector(const Vector<T> &v){ size=v.size; p=new T[size]; for(int i=0;i<size;i++)p[i]=v.p[i]; } ~Vector(){} void get_size(){ return size; } T& at(int i){ if(i<size&&i>=0)return p[i]; } T& operator[](int i){ return p[i]; } template<typename T1> friend void output(Vector<T1>v); private: T *p; int size; }; template<typename T1> void output(Vector<T1>v){ int i; for(i=0;i<v.size-1;i++)cout<<v.p[i]<<", "; cout<<v.p[i]<<endl; }
#include <iostream> #include "Vector.hpp" void test() { using namespace std; int n; cin >> n; Vector<double> x1(n); for(auto i = 0; i < n; ++i) x1.at(i) = i * 0.7; output(x1); Vector<int> x2(n, 32); Vector<int> x3(x2); output(x2); output(x3); x2.at(0) = 64; output(x2); x3[0] = 99; output(x3); } int main() { test(); }
实验任务5
#include<iostream> #include<fstream> #include<iomanip> using namespace std; void output(ostream& out){ char c; out<<" "; for(c='a';c<='z';c++)out<<setw(2)<<c; out<<endl; for(int i=1;i<=26;i++) { out<<setw(2)<<i; for(int j=0;j<26;j++) { c='A'+(i+j)%26; out<<setw(2)<<c; } out<<endl; } } int main() { output(cout); ofstream out; out.open("cipher_key.txt"); output(out); out.close(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结