⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch15_7.cpp

📁 本文档是C++程序设计教程系列的部分辅助代码。
💻 CPP
字号:
//**********************
//**    ch15_7.cpp    **
//**********************

#include <iostream.h>
#include <stdlib.h>

class Vector{
public:
  Vector(int);
  ~Vector(){ delete[]v; }         //将堆中数组空间返还
  Vector(Vector & );
  int Size(){ return sz; }
  void Display();
  int& Elem(int);                 //返回向量元素
protected:
  int* v;                         //指向一个数组,表示向量
  int sz;                         //元素个数
};

Vector::Vector(int s)
{
  if(s<=0){
    cerr <<"bad Vector size.\n";
    exit(1);
  }
  sz=s;
  v =new int[s];                  //从堆中分配一个数组存放向量元素
}

int& Vector::Elem(int i)          //引用返回的目的是返回值可以作左值
{
  if(i<0||sz<=i){
    cerr <<"Vector index out of range.\n";
    exit(1);
  }
  return v[i];
}

Vector::Vector(Vector& vec)
{
  v = new int[sz=vec.sz];
  memcpy((void*)v,(void*)vec.v,sz*sizeof(int));
}

void Vector::Display()
{
  for(int i=0; i<sz; i++)
    cout <<v[i] <<" ";
  cout <<endl;
}

class Matrix{
public:
  Matrix(int,int);
  Matrix(Matrix & );
  ~Matrix(){ delete[]m; }
  int SizeL(){ return szl; }
  int SizeR(){ return szr; }
  int& Elem(int,int);
protected:
  int* m;
  int szl;
  int szr;
};

Matrix::Matrix(int i,int j)
{
  if(i<=0||j<=0){
    cerr <<"bad Matrix size.\n";
    exit(1);
  }
  szl=i;
  szr=j;
  m =new int[i*j];
}

Matrix::Matrix(Matrix& mat)
{
  szl=mat.szl;
  szr=mat.szr;
  m=new int[szl*szr];
  memcpy((void*)m,(void*)mat.m, szl*szr*sizeof(int));
}
int& Matrix::Elem(int i,int j)      //引用返回的目的是返回值可以作左值
{
  if(i<0||szl<=i||j<0||szr<=j){
    cerr <<"Matrix index out of range.\n";
    exit(1);
  }
  return m[i*szr+j];
}

Vector Multiply(Matrix& m, Vector& v)  //矩阵乘向量的普通函数
{
  if(m.SizeR()!=v.Size()){
    cerr <<"bad multiply Matrix with Vector.\n";
    exit(1);
  }

  Vector r(m.SizeL());       //创建一个存放结果的空向量
  for(int i=0; i<m.SizeL(); i++){
    r.Elem(i)=0;
    for(int j=0; j<m.SizeR(); j++)
      r.Elem(i) +=m.Elem(i,j)*v.Elem(j);
  }

  return r;
}

void main()
{
  Matrix ma(4,3);
  ma.Elem(0,0)=1;  ma.Elem(0,1)=2;  ma.Elem(0,2)=3;
  ma.Elem(1,0)=0;  ma.Elem(1,1)=1;  ma.Elem(1,2)=2;
  ma.Elem(2,0)=1;  ma.Elem(2,1)=1;  ma.Elem(2,2)=3;
  ma.Elem(3,0)=1;  ma.Elem(3,1)=2;  ma.Elem(3,2)=1;
  Vector ve(3);
  ve.Elem(0)=2;  ve.Elem(1)=1;  ve.Elem(2)=0;
  Vector va =Multiply(ma,ve);
  va.Display();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -