实验三
task3_1.cpp
1 #include <iostream> 2 #include <fstream> 3 #include <array> 4 #define N 5 5 6 int main() { 7 using namespace std; 8 9 array<int, N> x {97, 98, 99, 100, 101}; 10 11 ofstream out; 12 out.open("data1.dat", ios::binary); 13 if(!out.is_open()) { 14 cout << "fail to open data1.dat\n"; 15 return 1; 16 } 17 18 out.write(reinterpret_cast<char *>(&x), sizeof(x)); 19 out.close(); 20 }
实验截图
task3_2.cpp
1 #include <iostream> 2 #include <fstream> 3 #include <array> 4 #define N 5 5 6 int main() { 7 using namespace std; 8 array<int, N> x; 9 //array<char,N> x; 10 ifstream in; 11 in.open("data1.dat", ios::binary); 12 if(!in.is_open()) { 13 cout << "fail to open data1.dat\n"; 14 return 1; 15 } 16 17 in.read(reinterpret_cast<char *>(&x), sizeof(x)); 18 in.close(); 19 20 for(auto i = 0; i < N; ++i) 21 cout << x[i] << ", "; 22 cout << "\b\b \n"; 23 }
实验截图:
对task3_2.cpp的代码稍做改动,把line7的对象类型从 array<int, N> 改成 array<char, N> 其它不做任何改动,再次运行程序,观察运行结果是什么?尝试分析原因:为什么会是那样的结果? 截图:
在task3_1中,将数存入二进制文件中是以char*型写入的(write),故存入的内容为a b c d e;
在task3_2将字符读出时,int 读到的是ASCLL码值的形式的数字形式,故为97,98,99,100,101
修改后,以char 读取时,每次只读一个字符,故第一次读到的是a,在2~4次中,读到的是ab之间的空格,共有三个,所以读了三次,在第五次的时候,读到了之后的字符b;
实验四
Vector.hpp
1 #pragma once 2 #include<iostream> 3 using namespace std; 4 template <class T> 5 class Vector; 6 7 template <class T> 8 void output(Vector<T>& x) 9 { 10 for (int i = 0; i < x.size; i++) 11 { 12 cout << x.p[i] << ", "; 13 } 14 cout << "\b\b \n"; 15 } 16 17 template <class T> 18 class Vector 19 { 20 private: 21 int size; 22 T* p; 23 24 public: 25 Vector(int n); 26 Vector(int n, T); 27 ~Vector(); 28 int get_size() const { return size; } 29 T& at(int index) 30 { 31 return p[index]; 32 } 33 T& operator[](int index) 34 { 35 return p[index]; 36 } 37 Vector(const Vector<T>& v); 38 friend void output<>(Vector<T>& x); 39 }; 40 41 42 template <class T> 43 Vector<T>::Vector(int n) : size{ n } 44 { 45 p = new T[n]; 46 } 47 48 template <class T> 49 Vector<T>::Vector(int n, T x) : size{ n } 50 { 51 p = new T[n]; 52 for (auto i = 0; i < n; i++) 53 { 54 p[i] = x; 55 } 56 } 57 58 template <class T> 59 Vector<T>::~Vector() 60 { 61 delete[] p; 62 } 63 64 template <class T> 65 Vector<T>::Vector(const Vector<T>& v) : size{ v.size } 66 { 67 p = new T[size]; 68 for (auto i = 0; i < get_size(); i++) 69 { 70 p[i] = v.p[i]; 71 } 72 }
task4.cpp
1 #include <iostream> 2 #include "Vector.hpp" 3 4 void test() { 5 using namespace std; 6 7 int n; 8 cin >> n; 9 10 Vector<double> x1(n); 11 for (auto i = 0; i < n; ++i) 12 x1.at(i) = i * 0.7; 13 14 output(x1); 15 16 Vector<int> x2(n, 42); 17 Vector<int> x3(x2); 18 19 output(x2); 20 output(x3); 21 22 x2.at(0) = 77; 23 output(x2); 24 25 x3[0] = 999; 26 output(x3); 27 } 28 29 int main() { 30 test(); 31 }
实验截图:
实验五
task5.cpp
1 #include<iostream> 2 #include <fstream> 3 #include<iomanip> 4 using namespace std; 5 6 void output(std::ostream &out) 7 { 8 out<<" "; 9 for(int i=97;i<123;i++) 10 { 11 out<<char(i)<<" "; 12 } 13 out<<endl; 14 for(int i=1;i<=26;i++) 15 { 16 out<<setw(2)<<i; 17 for(int j=i;j<i+26;j++) 18 { 19 out<<setw(2)<<char(65 + j % 26); 20 } 21 out<<endl; 22 } 23 } 24 25 int main() 26 { 27 output(cout); 28 ofstream out; 29 out.open("cipher_key.txt"); 30 if(!out.is_open()){ 31 cout<<"fail to open file cipher_key.txt to write"<<endl; 32 return 1; 33 } 34 output(out); 35 out.close(); 36 }
实验截图:
标签:std,int,Vector,实验,output,include,size From: https://www.cnblogs.com/lee404error/p/16950892.html