#ifndef ARRAYS #define ARRAYS class iVector; class imatrix; class matrix; class Vector { friend class matrix; double *data; int len; public: //constructors Vector(); Vector(int n); void resize(int n); //copy operator Vector(const Vector& original); //destructor ~Vector(); //assignment operator Vector& operator =(const Vector &original); Vector& operator =(const Vector original); double& operator[](int i)const; Vector operator +(const Vector& v); Vector operator -(const Vector& v); friend Vector operator*(double,Vector); friend Vector operator*(Vector,double); friend Vector operator*(Vector&); void rprint() const; void print()const ; void free_data(); friend double dot(const Vector& v1, const Vector& v2); int length() const{ return len;} void zero(void); double norm(void)const; friend double norm(const Vector& v); int operator==(const Vector& v)const; double max()const; double min()const; friend ostream& operator<<(ostream& s,Vector v); double mean()const; }; class matrix { Vector* m; int rows,cols; public: //constructor matrix(); matrix(const int r,const int c); //copy matrix(const matrix &s); //destructor ~matrix(); //assignment operator matrix& operator =(const matrix& s); void print() const; void pprint() const; //select a row Vector& operator[](const int i); //arithmetic operations Vector operator*(const Vector&); friend matrix operator*(const double, const matrix); friend matrix operator*(const matrix, const double); matrix matrix::operator*(const matrix a); matrix operator+(const matrix& a); matrix operator-(const matrix& a); friend void ludcmp(matrix& a, iVector& indx,double& d); friend void lubksb(matrix&a,iVector& indx,Vector&b); void zero(void); void identity(void) ; friend ostream& operator<<(ostream& s,matrix m); }; class iVector { friend class imatrix; int *data; int len; public: //constructors iVector(); iVector(int n); //copy operator iVector(const iVector& original); //destructor ~iVector(); //assignment operator iVector& operator =(const iVector &original); iVector& operator =(const iVector original); int& operator[](int i)const; iVector operator +(const iVector& v); iVector operator -(const iVector& v); friend iVector operator*(int,iVector); friend iVector operator*(iVector,int); //friend iVector operator*(iVector&); void rprint() const; void print()const ; friend int dot(const iVector& v1, const iVector& v2); friend double norm(const iVector& v); int length() const{ return len;} int operator==(const iVector& v)const; friend ostream& operator<<(ostream& s,iVector v); void zero(); int max(void)const; int min(void)const; }; class imatrix { iVector* m; int rows,cols; public: //constructor imatrix(); imatrix(const int r,const int c); //copy imatrix(const imatrix &s); //destructor ~imatrix(); //assignment operator imatrix& operator =(const imatrix& s); void print() const; //select a row iVector& operator[](const int i); //arithmetic operations iVector operator*(const iVector&); friend imatrix operator*(const int, const imatrix); friend imatrix operator*(const imatrix, const int); imatrix operator+(const imatrix& a); imatrix operator-(const imatrix& a); int rowsum(int i)const ; void zero(void); }; #endif