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

📄 fe_matrix.h

📁 这是一个语音特征提取的程序源码
💻 H
字号:
///////////////////////////////////////////////////////////////////////////////
// This is a part of the Feature program.
// Version: 1.0
// Date: February 22, 2003
// Programmer: Oh-Wook Kwon
// Copyright(c) 2003 Oh-Wook Kwon. All rights reserved. owkwon@ucsd.edu
///////////////////////////////////////////////////////////////////////////////

// ------------------------------------------------------------------------
// zero-based matrix using vector container
// ------------------------------------------------------------------------

#ifndef _FE_MATRIX_H_
#define _FE_MATRIX_H_

#ifdef min
#undef min
#endif
#ifdef max
#undef max
#endif
#include <vector>
using namespace std;
#pragma warning(disable:4786)

template <typename T>
class FeMatrix : public vector<vector<T> > {
public:
	int m,n;
	FeMatrix(int m_=0,int n_=0,const T& v=T());
	virtual ~FeMatrix();
	FeMatrix<T>&  operator=(const FeMatrix<T>& A);
	FeMatrix<T>&  operator=(const T& a);
	int Resize(int m, int n);
};


// ------------------------------------------------------------------------
// Matrix implementation
// ------------------------------------------------------------------------
#ifndef local_max
#define local_max(a, b)  (((a) > (b)) ? (a) : (b))
#endif
#ifndef local_min
#define local_min(a, b)  (((a) < (b)) ? (a) : (b)) 
#endif

/////////////////////////////
// constructor and destructor
/////////////////////////////
template <typename T> FeMatrix<T>::FeMatrix(int m_, int n_, const T& v_) : m(m_), n(n_) {
	int i;
	(*this).resize(m);
	for(i=0;i<m;i++) (*this)[i].resize(n);
	for(i=0;i<m;i++) for(int j=0;j<n;j++)  (*this)[i][j]=v_;
}


template <typename T> inline FeMatrix<T>::~FeMatrix() {
}


/////////////////////////////
// operator overloading
/////////////////////////////
template <typename T> inline FeMatrix<T>& FeMatrix<T>::operator=(const FeMatrix<T>& A) {
	if(this == &A) return *this;
	if ( A.n != n || A.m != m) Resize(A.m, A.n);
	//for(int i=0;i<m;i++) for(int j=0;j<n;j++)  (*this)[i][j]=A[i][j];
	for(int i=0;i<m;i++) (*this)[i]=A[i];
	return *this;
}


template <typename T> FeMatrix<T>& FeMatrix<T>::operator=(const T& a) {
	for(int i=0; i<m; ++i) for(int j=0;j<n; ++j) (*this)[i][j] = a;
	return *this;
}


/////////////////////////////
// member functions
/////////////////////////////
template <typename T> int FeMatrix<T>::Resize(int new_m, int new_n) {
	if(new_m==m && new_n==n) return 1;
	// must preserve data
	int i;
	for(i=0;i<local_min(m,new_m);i++) { (*this)[i].resize(new_n); }
	(*this).resize(new_m);
	for(i=m;i<new_m;i++) { (*this)[i].resize(new_n); }
	m=new_m; n=new_n;
	return 1;
}


#endif

⌨️ 快捷键说明

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