023
25.09.2003, 12:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft... (Operator)
|
so ein mist das wollte ich erst so machen und dann habe ich mich entscheiden die dimensionen doch erst im konstruktor zu übergeben na gut dann werd ich das noch ändern was gibts denn sonst noch so an meiner bisherigen implementierung auszusetzen (ausser das kommentare fehlen)
C++: |
#include <iostream> #include <vector>
template <class Typ> class CMatrix{
private: std::vector<std::vector<Typ> > matrix;
public: CMatrix(int zeilen,int spalten,Typ value=0); CMatrix(int zeilen,int spalten,Typ* values); CMatrix(int zeilen,int spalten,Typ** values); CMatrix(std::vector<std::vector<Typ> > m); CMatrix(CMatrix&);
void operator=(CMatrix& m); bool operator==(CMatrix& m); std::vector<Typ>& operator[](int& index); CMatrix operator!(); // CMatrix operator~();
CMatrix operator+(CMatrix& m); CMatrix operator-(CMatrix& m); CMatrix operator*(Typ& s); CMatrix operator*(CMatrix& m); CMatrix operator/(Typ& s); void Matrix_ausgeben();
};
template <class Typ>CMatrix<Typ>::CMatrix(int zeilen,int spalten,Typ value):matrix(spalten,std::vector<Typ>(zeilen)){ for(int j=0;j<zeilen;++j) for(int i=0;i<spalten;++i) matrix[i][j]=value; }
template <class Typ>CMatrix<Typ>::CMatrix(int zeilen,int spalten,Typ* values):matrix(spalten,std::vector<Typ>(zeilen)){ for(int j=0;j<zeilen;++j) for(int i=0;i<spalten;++i) matrix[i][j]=values[i+j*x]; }
template <class Typ>CMatrix<Typ>::CMatrix(int zeilen,int spalten,Typ** values):matrix(spalten,std::vector<Typ>(zeilen)){ for(int j=0;j<zeilen;++j) for(int i=0;i<spalten;++i) matrix[i][j]=values[i][j]; }
template <class Typ>CMatrix<Typ>::CMatrix(std::vector<std::vector<Typ> > m):matrix(m){}
template <class Typ>CMatrix<Typ>::CMatrix(CMatrix& m):matrix(m.matrix){}
template <class Typ> void CMatrix<Typ>::operator=(CMatrix& m){ if(matrix.size()!=m.matrix.size() || matrix[0].size()!=m.matrix[0].size()) return; for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) matrix[i][j]=m[i][j]; }
template <class Typ> bool CMatrix<Typ>::operator==(CMatrix& m){ if(matrix.size()!=m.matrix.size() || matrix[0].size()!=m.matrix[0].size()) return false; for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) if(matrix[i][j]!=m[i][j])return false; return true; }
template <class Typ> std::vector<Typ>& CMatrix<Typ>::operator[](int& index){ return matrix[index]; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator!(){ CMatrix rv(matrix.size(),matrix[0].size()); for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) rv[j][i]=matrix[i][j]; return rv; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator+(CMatrix& m){ CMatrix rv(*this); for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) rv[i][j]+=m[i][j]; return rv; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator-(CMatrix& m){ CMatrix rv(*this); for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) rv[i][j]-=m[i][j]; return rv; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator*(Typ& s){ CMatrix rv(*this); for(int j=0;j<matrix[0].size();++j) for(int i=0;i<matrix.size();++i) rv[i][j]*=s; return rv; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator*(CMatrix& m){ CMatrix rv(matrix[0].size(),m.matrix.size()); for(int j=0;j<rv.matrix[0].size();++j) for(int i=0;i<rv.matrix.size();++i) for(int h=0;h<matrix.size();++h) rv[i][j]+=matrix[h][j]*m[i][h]; return rv; }
template <class Typ> CMatrix<Typ> CMatrix<Typ>::operator/(Typ& s){ return CMatrix(*this)*(1.0/s); }
template <class Typ> void CMatrix<Typ>::Matrix_ausgeben(){ std::cout<<std::endl; for(int j=0;j<matrix[0].size();++j,std::cout<<std::endl) for(int i=0;i<matrix.size();++i) std::cout<<matrix[i][j]<<"\t"; std::cout<<std::endl; }
|
-- ...fleißig wie zwei Weißbrote Dieser Post wurde am 25.09.2003 um 12:44 Uhr von Windalf editiert. |