实验任务4:
vector_int.hpp
1 #ifndef VECTOR_INT_HPP 2 #define VECTOR_INT_HPP 3 4 #include<iostream> 5 #include<cassert> 6 7 class Vector_int{ 8 public: 9 Vector_int(int n,int inital_val=0); 10 Vector_int(const Vector_int &v); 11 ~Vector_int(); 12 int& at(int index); 13 void show()const; 14 private: 15 int size; 16 int *a; 17 }; 18 19 Vector_int::Vector_int(int n,int initial_val):size{n}{ 20 a=new int[size]; 21 for(auto i=0;i<size;++i) 22 a[i]=initial_val; 23 std::cout<<"dynamic create array..."<<std::endl; 24 } 25 Vector_int::Vector_int(const Vector_int &v):size{v.size}{ 26 a=new int[size]; 27 for(auto i=0;i<size;++i) 28 a[i]=v.a[i]; 29 } 30 Vector_int::~Vector_int(){ 31 std::cout<<"deleting..."<<std::endl; 32 delete [] a; 33 } 34 int& Vector_int::at(int index){ 35 assert(index>=0&&index<size); 36 return a[index]; 37 } 38 void Vector_int::show()const{ 39 for(auto i=0;i<size;i++) 40 std::cout<<a[i]<<", "; 41 std::cout<<"\b\b \n"; 42 } 43 #endif
task4.cpp
1 #include"vector_int.hpp" 2 #include<iostream> 3 4 int main(){ 5 using namespace std; 6 int n; 7 cin>>n; 8 9 Vector_int v1(n); 10 v1.show(); 11 12 Vector_int v2(n,7); 13 v2.show(); 14 15 Vector_int v3(v1); 16 v3.at(0)=777; 17 v3.show(); 18 19 Vector_int v4(v2); 20 v4.at(0)=111; 21 v4.show(); 22 }
运行截图:
实验任务5
matrix.hpp
1 #ifndef MATRIX_HPP 2 #define MATRIX_HPP 3 4 #include<iostream> 5 6 class Matrix{ 7 public: 8 Matrix(int n); 9 Matrix(int n,int m); 10 Matrix(const Matrix &X); 11 ~Matrix(); 12 void set(const double *pvalue); 13 void set(int i,int j,int value); 14 double &at(int i,int j); 15 double at(int i,int j)const; 16 int get_lines() const; 17 int get_cols() const; 18 void print()const; 19 private: 20 int lines; 21 int cols; 22 double *p; 23 }; 24 Matrix::Matrix(int n):lines{n},cols{n}{ 25 p=new double[lines*cols]; 26 } 27 Matrix::Matrix(int n,int m):lines{n},cols{m}{ 28 p=new double[lines*cols]; 29 } 30 Matrix::Matrix(const Matrix &X):lines{X.lines},cols{X.cols}{ 31 p=new double[lines*cols]; 32 for(auto i=0;i<lines*cols;++i) 33 p[i]=X.p[i]; 34 } 35 Matrix::~Matrix(){ 36 std::cout<<"deleting..."<<std::endl; 37 delete [] p; 38 } 39 void Matrix::set(const double *pvalue){ 40 for(auto i=0;i<lines;++i) 41 for(auto j=0;j<cols;++j) 42 p[i*cols+j]=pvalue[i*cols+j]; 43 } 44 void Matrix::set(int i,int j,int value){ 45 p[i*cols+j]=value; 46 } 47 double& Matrix::at(int i,int j){ 48 return p[i*cols+j]; 49 } 50 double Matrix::at(int i,int j)const{ 51 return p[i*cols+j]; 52 } 53 int Matrix::get_lines()const{ 54 return lines; 55 } 56 int Matrix::get_cols()const{ 57 return cols; 58 } 59 void Matrix::print()const{ 60 for(auto i=0;i<lines;++i){ 61 for(auto j=0;j<cols;++j) 62 std::cout<<p[i*cols+j]<<", "; 63 std::cout<<"\b\b \n"; 64 } 65 } 66 #endif
task5.cpp
1 #include "matrix.hpp" 2 #include <iostream> 3 4 int main(){ 5 using namespace std; 6 7 double x[] = {1, 2, 3, 4, 5, 6}; 8 9 Matrix m1(3, 2); // 创建一个3×2的矩阵 10 m1.set(x); // 用一维数组x的值按行为矩阵m1赋值 11 m1.print(); // 打印矩阵m1的值 12 cout << "the first line is: " << endl; 13 cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl; 14 cout << endl; 15 16 Matrix m2(2, 3); 17 m2.set(x); 18 m2.print(); 19 cout << "the first line is: " << endl; 20 cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl; 21 cout << endl; 22 23 Matrix m3(m2); 24 m3.set(0, 0, 999); 25 m3.print(); 26 return 0; 27 }
运行截图:
总结:
1.本次实验我熟悉使用了动态内存分配new以及delete的用法;
2.了解了assert的条件表达值的判断;