首页 > 其他分享 >实验四

实验四

时间:2022-11-03 19:11:32浏览次数:43  
标签:const Matrix int double 矩阵 实验 vectorInt

实验任务五

        vectorInt.hpp

#pragma once
#include<bits/stdc++.h>
using namespace std;
class vectorInt{
    public:
    vectorInt(int n);
    vectorInt(int n,int v);
    vectorInt(const vectorInt &x);
    ~vectorInt();
    int &at(int index);    
    int get_size() const;
    friend void output(vectorInt &xx);
    private:
        int size;
        int *a;
};
int vectorInt::get_size()const{
    return size;
}
vectorInt::vectorInt(int n,int v):size{n}{
    cout<<"constructor 2 called."<<endl;
    a = new int[n];
    for(int i=0;i<n;i++)
    a[i] = v;
}
vectorInt::vectorInt(int n):size{n}{
     cout<<"constructor 1 called."<<endl;
     a = new int[n];
};
vectorInt::~vectorInt(){ 
      delete[] a;
      cout<<"destructor called."<<endl;
}
vectorInt::vectorInt(const vectorInt& x){
    size = x.size;
    a = new int[size];
    for(int i = 0; i < size; ++i)
    a[i] = x.a[i];
   cout << "copy constructor called." << endl;
}
int &vectorInt::at(int index){
    assert(index >= 0 && index < size);
    return a[index];
}
void output(vectorInt &xx){
    for(int i=0;i<xx.get_size();i++)
    cout<<xx.at(i)<<" ";
    cout<<endl;
}

    task5.cpp

#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 <bits/stdc++.h>
using namespace std;

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(int n):lines{n},cols{n}{
    p = new double[n*n];
}
Matrix::Matrix(int n,int m):lines{n},cols{m}{
    p = new double[n*m];
}
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(){
    for(int i=0;i<lines*cols;i++)
    delete []p;
}
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];
}
void Matrix::set(const double *pvalue){
    int i;
    for(i=0;i<lines*cols;i++)
    p[i] = *(pvalue++);
}
void Matrix::set(int i,int j,int value){
    p[i*cols+j] = value;
}
int Matrix::get_lines() const{ return lines;}             //返回矩阵行数
int Matrix::get_cols() const{ return cols;}
void Matrix::print()const{
     int i;
     for(i=0;i<lines*cols;i++){
         cout<<p[i]; 
        if((i+1)%cols==0) cout<<endl;
         else cout<<",";
    }
}
// 类Matrix的实现:待补足
// ×××

    task6.cpp

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

void test() {
    using namespace std;

    double x[] = {1, 2, 3, 4, 5, 6};

    Matrix m1(3, 2);    // 创建一个3×2的矩阵
    m1.set(x);          // 用一维数组x的值按行为矩阵m1赋值
    m1.print();         // 打印矩阵m1的值
    cout << "the first line is: " << endl;
    cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;  // 输出矩阵m1第1行两个元素的值
    cout << endl;

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

    Matrix m3(m2);      // 用矩阵m2构造新的矩阵m3
    m3.set(0, 0, 999);  // 将矩阵m3第0行第0列元素值设为999
    m3.print();
}

int main() {
    test();
}

  

 

     对于指针和引用的理解还有待提高

标签:const,Matrix,int,double,矩阵,实验,vectorInt
From: https://www.cnblogs.com/nitendoblog/p/16855538.html

相关文章

  • 实验四 类与数组,指针
    一、实验结论:1.实验任务5:vectorint.hpp:#include<iostream>#include<iomanip>usingnamespacestd;classvectorint{public:vectorint(intn):size{n}......
  • 畜牧虚拟仿真3D交互展示应用为学生提供高逼真、安全的场景模拟实验环境-深圳华锐视点
    大力发展高等职业教育是我国实现经济快速可持续发展的必然选择,在强国发展占有举足轻重的作用。华锐视点立足于先进成熟的5G、VRAR、物联网、三维建模和AI等技术,以解决......
  • 实验四
    实验任务五:vectorInt.hpp:1#include<iostream>2#include<cassert>3usingnamespacestd;4classvectorInt{5public:6vectorInt(intn);7......
  • 实验四
    实验4.5#pragmaonce#include<iostream>usingnamespacestd;classvectorInt{friendvoidoutput(vectorInt&v);public:vectorInt(intn);vectorIn......
  • Python第十章实验报告
    一、实验题目Python第十章实例和实战作业二、实验目的和要求1.熟悉Pycharm的运行环境2.学习并掌握Python文件及目录操作三、主要仪器设备联想小新air15硬件:AMDR75......
  • 实验四
    vectorint.hpp#pragmaonce#include<iostream>usingstd::cout;usingstd::endl;classvectorint{private:intsize;int*p;public:vectorint(int......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • 实现实验室和寝室两台电脑文件实时同步
    考虑到白天去实验室工作,晚上又要回寝室,文件传输会很麻烦,于是寻求能够方便进行文件远程同步的方案。1.使用工具内网穿透:zerotier(全平台均可)文件同步(备份)工具:FreeFileSync(Win......
  • 实验3
     task1#include<stdio.h>#include<stdlib.h>#include<time.h>#include<Windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_sp......
  • P4 tutorials实验 - basic-tunnel
    P4tutorials实验-basic-tunnel基础知识隧道(tunnel):可以将IP隧道视为一对节点之间的虚拟点对点链路虚拟链路是在隧道入口处的路由器内创建的,当隧道入口处的路由器想通......