实验4

实验任务5

vectorint.hpp

 1 #pragma once
 2 #include<cassert>
 3 #include<iostream>
 4 using namespace std;
 5 class vectorint {
 6 public:
 7     vectorint(int m) { p = new int[m]; size = m; cout << "construct1 called" << endl; }
 8     vectorint(int m, int value) { p = new int[m]; size = m; for (auto i = 0; i < m; ++i) p[i] = value; cout << "construct2 called" << endl; }
 9     vectorint(const vectorint& x) {
10         p = new int[x.size]; size = x.size;
11         for (auto i = 0; i < x.size; ++i)
12             p[i] = x.p[i];
13         cout << "copy construct called" << endl;
14     }  
15     ~vectorint() { delete p; p = 0; cout << "析构函数调用" << endl; }
16     int  get_size() { return size; }
17     int &at(int index);
18     friend void output(const vectorint& x);
19 private:
20     int* p;
21     int size;
22 };
23 void output(const vectorint& x) {
24     for (auto i = 0; i < x.size; ++i)
25         cout << x.p[i] << " ";
26     cout << endl;
27 }
28 int &vectorint::at(int index) {
29     assert(index >= 0 & index < size);
30     return p[index];
31 }

task5.cpp

 1 #include <iostream>
 2 #include "vectorint.hpp"
 3 
 4 void test() {
 5     using namespace std;
 6 
 7     int n;
 8     cin >> n;
 9 
10     vectorint x1(n);
11     for (auto i = 0; i < n; ++i)
12         x1.at(i) = i * i;
13 
14     output(x1);
15 
16     vectorint x2(n, 42);
17     vectorint x3(x2);
18 
19     output(x2);
20     output(x3);
21 
22     x2.at(0) = 77;
23 
24     output(x2);
25     output(x3);
26 }
27 
28 int main() {
29     test();
30 }

实验任务6:

Matrix.hpp:

#pragma once

#include <iostream>


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

class Matrix {
public:
    Matrix(int n);                     // 构造函数,构造一个n*n的矩阵
    Matrix(int n, int m);              // 构造函数,构造一个n*m的矩阵
    Matrix(const Matrix &X);           // 复制构造函数,使用已有的矩阵X构造
    ~Matrix();                         //析构函数

    void set(const double *pvalue);     // 用pvalue指向的连续内存块数据按行为矩阵赋值
    void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value
    double &at(int i, int j);          //返回矩阵第i行第j列元素的引用
    double at(int i, int j) const;     // 返回矩阵第i行第j列元素的值
    int get_lines() const;             //返回矩阵行数
    int get_cols() const;              //返回矩列数
    void print() const;                // 按行打印输出矩阵

private:
    int lines; // 矩阵行数
    int cols;  // 矩阵列数
    double *p; // 指向存放矩阵数据的内存块的首地址
};

// 类Matrix的实现:待补足 
// ×××
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];
    int i = 0;
    for ( i = 0; i < lines * cols; i++)
        p[i] = X.p[i];
}
Matrix::~Matrix() { delete p; p = 0; }
void Matrix::set(const double* pvalue) { int i = 0; for (i; i < lines * cols; ++i) p[i] = *pvalue++; }
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]; }
double Matrix::at(int i, int j)const { return p[i * cols + j]; }
int Matrix::get_lines()const { return lines; }
int Matrix::get_cols()const { return cols; }
void Matrix::print()const { int couter; for (couter = 0; couter < lines * cols; ++couter) { cout << p[couter] << ","; if ((couter + 1) % cols == 0) cout << "\b" << " " << endl; } }

task6.cpp

 1 #include <iostream>
 2 #include "Matrix.hpp"
 3 
 4 void test() {
 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;  // 输出矩阵m1第1行两个元素的值
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);      // 用矩阵m2构造新的矩阵m3
24     m3.set(0, 0, 999);  // 将矩阵m3第0行第0列元素值设为999
25     m3.print();
26 }
27 
28 int main() {
29     test();
30 }

 

posted @ 2022-11-07 10:58  观湖  阅读(29)  评论(0)    收藏  举报