实验四

vectorInt.hpp

#include<iostream>
#include <cassert>
using namespace std;
class vectorInt{
    public:
        vectorInt(int n);
        vectorInt(int n,int value);
        ~vectorInt();
        vectorInt(const vectorInt &obj);
        int &at(int index);
        int get_size();
        friend void output(vectorInt &T);
    private:
        int size;
        int *p;
};
vectorInt::vectorInt(int n) :size{n} {cout<<"constructor 1 called"<<endl; p=new int[n];};
vectorInt::vectorInt(int n,int value):size{n} {cout<<"constructor 2 called"<<endl;p=new int[size];int i=size;while(i--){p[i]=value;}};
vectorInt::~vectorInt() {cout<<"destructor called"<<endl;delete[] p;};
vectorInt::vectorInt(const vectorInt &obj) :size{obj.size}
{
    p=new int[size];
    int i=0;
    while(i<size)
    {
        p[i]=obj.p[i];
        i++;
    }
    cout<<"copy constructor called"<<endl; 
}
int &vectorInt::at(int index)
{
    assert(index >= 0 && index < size);
    return p[index];
} 
int vectorInt::get_size()
{
    return size;
} 
void output(vectorInt &T) 
{
    int i=0;
    while(i<T.get_size())
    {
        cout<<T.p[i]<<" ";
        i++;
    }
    cout<<endl;
}

task5

#include <iostream>
#include "vectorInt.hpp"

void test() {
    using namespace std;

    int n;
    cin >> n;
    
    vectorInt x1(n);
    for(auto i = 0; i < n; ++i)
    {
        x1.at(i) = i*i;
    }

    output(x1);
    
    vectorInt x2(n, 42);

    vectorInt x3(x2);

    output(x2);
    output(x3);

    x2.at(0) = 77;

    output(x2);
    output(x3);
}

int main() {
    test();
}

测试结果:

 matrix.hpp

#pragma once

#include <iostream>


using std::cout;
using std::endl;

class Matrix {
public:
    Matrix(int n);                    
    Matrix(int n, int m);              
    Matrix(const Matrix &X);           
    ~Matrix();                         

    void set(const double *pvalue);     
    void set(int i, int j, int value);
    double &at(int i, int j);          
    double at(int i, int j) const;     
    int get_lines() const;             
    int get_cols() const;            
    void print() const;             

private:
    int lines; 
    int cols;  
    double *p; 
};
Matrix::Matrix(int n) : lines{n},cols{n} 
{
    p=new double[lines*cols];
};
Matrix::Matrix(int n, int m) : lines{n},cols{m}
{
    p=new double[lines*cols];
};
Matrix::Matrix(const Matrix &X)
{
    lines=X.lines;
    cols=X.cols;
    p=new double[lines*cols];
    for(int i=0;i<lines*cols;i++)
    p[i]=X.p[i];
}
Matrix::~Matrix()  {delete[] p;}
void Matrix::set(const double *pvalue)
{
    int i=0,j=0;
    while(i<lines*cols)
    {
        p[i++]=pvalue[j++];
    }
}
void Matrix::set(int i, int j, int value)
{
    p[i*cols+j]=value;
}
double &Matrix::at(int i, int j)
{
    return p[i*cols+j];
}
int Matrix::get_lines() const
{
    return lines;
}
int Matrix::get_cols() const
{
    return cols;
}
void Matrix::print() const
{
    int i=0;
    while(i<lines)
    {
        int j=0;
        while(j<cols)
        {
            cout<<p[i*cols+j]<<" ";
            j++;
        }   
        cout<<endl;
        i++;
    }
}

task6

#include <iostream>
#include "matrix.hpp"

void test() {
    using namespace std;

    double x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    Matrix m1(3, 4);    
    m1.set(x);         
    m1.print();         
    cout << "the first line is: " << endl;
    cout << m1.at(1, 0) << " " << m1.at(1, 1) <<" "<<m1.at(1,2) <<" "<<m1.at(1,3)<< endl;  
    cout << endl;

    Matrix m2(4, 3);
    m2.set(x);
    m2.print();
    cout << "the first line is: " << endl;
    cout << m2.at(0, 2) << " " << m2.at(1, 2) << " " << m2.at(2, 2) <<" "<<m2.at(3,2)<< endl;
    cout << endl;

    Matrix m3(m2);      
    m3.set(3, 2, 101); 
    m3.print();
}

int main() {
    test();
}

测试结果:

 

posted @ 2022-11-02 20:21  zoRing  阅读(37)  评论(0)    收藏  举报