📄 matrix.txt
字号:
/**************************************************************************\MODULE: matrixSUMMARY:Macros are deined providing template-like classes for dynamic-sized,recatngular matrices.The macro NTL_matrix_decl(T,vec_T,vec_vec_T,mat_T) declares a new classmat_T representing matrices over T, where vec_T and vec_vec_T areclasses representing "NTL vectors" over T and vec_T, respectively.The implementation of mat_T can be instantiated with NTL_matrix_impl(T,vec_T,vec_vec_T,mat_T).If T supports I/O and/or equluality testing, then mat_Tcan also be made to support these.For example, the declaration mat_T M;creates a 0 x 0 matrix. We can make it have 10 rows and 20 columns like this: M.SetDims(10, 20);A row can be accessed as M[i], indexing from 0, or as M(i), indexing from 1.A matrix entry can be accessed as M[i][j], indexing from 0, or asM(i, j), indexing from 1.A matrix is represented as a vec_vec_T: a vector of rows, whereeach row is a vec_T. Any attempt to resize one of the rows soas to create a non-rectangular matrix will result in a run-time error.The dimensions of an existing matrix may be changed. If the number ofcolumns does not change, then the matrix is just "resized" like a vector,and no information is lost. Otherwise, if the number of columns changes,the matrix is completely destroyed, and a new matrix is created\**************************************************************************/class mat_T { mat_T(); // initially 0 x 0 mat_T(const mat_T& a); mat_T& operator=(const mat_T& a); ~mat_T(); mat_T(INIT_SIZE_TYPE, long n, long m); // mat_T(INIT_SIZE, n, m) initializes an n x m matrix, invoking // the default constructor for T to initialize entries. void SetDims(long n, long m); // M.SetDims(n, m) makes M have dimension n x m. If the number of // columns (m) changes, previous storage is freed, and space for M // is reallocated and initialized; otherwise, more rows are // allocated as necessary (when number of rows increases), // excess rows are retained (when number of rows decreases), // and--importantly--the contents do not change. void kill(); free storage and make 0 x 0 long NumRows() const; // M.NumRows() returns the number of rows of M long NumCols() const; // M.NumCols() returns the number of columns of M vec_T& operator[](long i); const vec_T& operator[](long i) const; // access row i, initial index 0. Any attempt to change the length // of this row will raise an error. vec_T& operator()(long i); const vec_T& operator()(long i) const; // access row i, initial index 1. Any attempt to change the length // of this row will raise an error. T& operator()(long i, long j); const T& operator()(long i, long j) const; // access element (i, j), both indices starting at 1 friend const vec_vec_T& rep(const mat_T& a); // read-only access to underlying representation long position(const vec_T& a) const; // returns index of a in matrix, or -1 if not present};void swap(mat_T& X, mat_T& Y);// swaps X and Y (by swapping pointers)void MakeMatrix(mat_T& x, const vec_vec_T& a);// copies a to x, checking that it is "rectangular"/**************************************************************************\ Input/OutputThe I/O operators can be declared with NTL_io_matrix_decl(T,vec_T,vec_vec_T,mat_T), andimplemented using NTL_io_matrix_impl(T,vec_T,vec_vec_T,mat_T). I/O is implemented using the underlying I/O operators for vec_vec_T.\**************************************************************************/istream& operator>>(istream&, mat_T&);ostream& operator<<(ostream&, const mat_T&); /**************************************************************************\ Equality TestingThe equality testing operators == and != can be declaredNTL_eq_matrix_decl(T,vec_T,vec_vec_T,mat_T), andimplemented using NTL_eq_matrix_impl(T,vec_T,vec_vec_T,mat_T). Equality testing is implemented using the underlying equality operators for vec_vec_T.\**************************************************************************/long operator==(const mat_T& a, const mat_T& b);long operator!=(const mat_T& a, const mat_T& b);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -