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

📄 fx_matr.h

📁 可重用的向量/矩阵类代码,这是一个灵活的向量/矩阵类代码
💻 H
字号:

// #########################################################
// === File #6 of 15 : fx_matr.h ===========================
// ------------------- C++ code : BEGIN --------------------

// ==============================================================
//
//  Copyright (c) 1999, 2001 by Alex Vinokur.  This work and all works
//  derived from it may be copied and modified without any
//  restrictions other than that a copy of this copyright notice
//  must be included in any copy of this work or any derived work.
//
// ==============================================================
// #########################################################
// ## mailto:alexvn@bigfoot.com, mailto:alexv@hitechclub.com
// ## http://up.to/alexv, http://go.to/alexv_math
// #########################################################
// ==============================================================


///////////////////////////////////////

#ifndef FX_MATR_H
#define FX_MATR_H

///////////////////////////////////////


// ##############################################################
//
//  SOFTWARE : Vector and Matrix with arbitrary bounds
//  FILE     : fx_matr.h
//
//  DESCRIPTION :
//         Definition of flexible matrix classes
//	   --------------------------------------------------
//         - ClassBasicMatrix
//         - ClassFlexibleMatrix
//	   --------------------------------------------------
//
//  ----           -------
//  Oct-30-2001    FVM 1.0
//
// ##############################################################

//==================
#include "fx_vect.h"
//==================

//===============================================
#define GET_melem(m, x, y) m##.at(x, LOCATION)##.at(y, LOCATION)

//########################################################
//#################### ClassBasicMatrix ##################
//######################## Declaration ###################
//########################################################
class ClassBasicMatrix
{
  protected:
    ClassBasicMatrix ();
    virtual ~ClassBasicMatrix ();
    static unsigned long	countBasicMatrixConstructors_s;
    static unsigned long	countBasicMatrixDestructors_s;
  public:
    static string		gstrBasicMatrixAccount_S (string msg_i = "");
};


//########################################################
//################### ClassFlexibleMatrix ################
//######################## Declaration ###################
//########################################################
template <class T>
class ClassFlexibleMatrix : public ClassBasicMatrix
{
  private:
    ClassFlexibleVector< ClassFlexibleVector<T> >	rowsVector_;
    ClassFlexibleVector<T>				emptyRow_;	// for Empty Matrix only
    ClassFlexibleVector<T>				dummy_vector_;

    bool		checkExternalRowIndex (int externalRowIndex_i) const;
    string		gstrMatrixShow (
				char*	file_name_i, 
				int	line_no_i, 
				string	msg_i = "",
				string	printFormat_i = "",
				int	width_i = 0
				) const;
    string		getErrorMsgAboutMatrixRowOutOfRange (
				int		externalIndex_i,
				const string&	theFuncName_i,
				const string 	fileName_i = "",
				const int	lineNo_i = 0,
				const string	compilationDate_i = "",
				const string	compilationTime_i = ""
				) const;

  public:
    ClassFlexibleMatrix ();
    ClassFlexibleMatrix (
		int 		minRowIndex_i,
		int 		minColumnIndex_i,
		const string 	fileName_i,
		const int	lineNo_i,
		const string	compilationDate_i,
		const string	compilationTime_i
		);
    ClassFlexibleMatrix (
		int 		minRowIndex_i,
		int		maxRowIndex_i,
		int 		minColumnIndex_i,
		int		maxColumnIndex_i,
		const T&	value_i,
		const string 	fileName_i,
		const int	lineNo_i,
		const string	compilationDate_i,
		const string	compilationTime_i
		);

    // Copy Constructor
    ClassFlexibleMatrix (const ClassFlexibleMatrix& theCopyInstance_i);
    ~ClassFlexibleMatrix ();
    bool		empty () const;			// for Rectangular Matrix only (Why?)
    bool		absolutelyEmpty () const;	// i.e. totalRows = 0
    bool		allRowsAreEmpty () const;	// i.e. totalRows > 0, but totalColumns in each row = 0;
    bool		isRectangular () const;
    int			totalRows () const {return rowsVector_.size ();}
    int			Get_minRowNo () const {return rowsVector_.Get_minIndex ();}
    int			Get_maxRowNo () const {return rowsVector_.Get_maxIndex ();}
    int			totalColumns () const;
    void		push_row (const ClassFlexibleVector<T>& row_i);
    void		push_column (const ClassFlexibleVector<T>& column_i);
    ClassFlexibleMatrix 	slice (
					const int& minRowIndexSlice_i,
					const int& maxRowIndexSlice_i,
					const int& minColumnIndexSlice_i,
					const int& maxColumnIndexSlice_i
					);
    ClassFlexibleMatrix&	operator= (const ClassFlexibleMatrix& instance_i);
    ClassFlexibleMatrix&	softAssign (const ClassFlexibleMatrix& instance_i);
    ClassFlexibleMatrix&	hardAssign (const ClassFlexibleMatrix& instance_i);
    ClassFlexibleVector<T>&	operator[] (int externalRowIndex_i);
    ClassFlexibleVector<T>	operator[] (int externalRowIndex_i) const;
    ClassFlexibleVector<T>&	at (int externalIndex_i,
					const string 	fileName_i,
					const int	lineNo_i,
					const string	compilationDate_i,
					const string	compilationTime_i
					);
    ClassFlexibleVector<T>	at (int externalIndex_i,
					const string 	fileName_i,
					const int	lineNo_i,
					const string	compilationDate_i,
					const string	compilationTime_i
					) const;
    ClassFlexibleVector<T>	getFirstMatrixRow () const;
    string			gstrVectorShowMatrix (string msg_i = "") const;
    string			gstrMElemenShow (
					int	externalRowIndex_i,
					int	externalColumnIndex_i,
					string	printFormat_i = "",
					int	width_i = 0
					) const;
    void			showMatrix (
					char*	file_name_i, 
					int	line_no_i, 
					string	msg_i = "",
					string	printFormat_i = "",
					int	width_i = 0
					) const;
};
//////////////////////////////////////////////////////////////////
//################################################################
//################################################################
//////////////////////////////////////////////////////////////////

//################################################################

#endif

//################################################################
//#                          END OF FILE                         # 
//################################################################


// ------------------- C++ code : END ----------------------
// === File #6 of 15 : fx_matr.h ===========================

⌨️ 快捷键说明

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