FE_matrix.h
上传用户:italyroyal
上传日期:2013-05-06
资源大小:473k
文件大小:3k
源码类别:

语音合成与识别

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // This is a part of the Feature program.
  3. // Version: 1.0
  4. // Date: February 22, 2003
  5. // Programmer: Oh-Wook Kwon
  6. // Copyright(c) 2003 Oh-Wook Kwon. All rights reserved. owkwon@ucsd.edu
  7. ///////////////////////////////////////////////////////////////////////////////
  8. // ------------------------------------------------------------------------
  9. // zero-based matrix using vector container
  10. // ------------------------------------------------------------------------
  11. #ifndef _FE_MATRIX_H_
  12. #define _FE_MATRIX_H_
  13. #ifdef min
  14. #undef min
  15. #endif
  16. #ifdef max
  17. #undef max
  18. #endif
  19. #include <vector>
  20. using namespace std;
  21. #pragma warning(disable:4786)
  22. template <typename T>
  23. class FeMatrix : public vector<vector<T> > {
  24. public:
  25. int m,n;
  26. FeMatrix(int m_=0,int n_=0,const T& v=T());
  27. virtual ~FeMatrix();
  28. FeMatrix<T>&  operator=(const FeMatrix<T>& A);
  29. FeMatrix<T>&  operator=(const T& a);
  30. int Resize(int m, int n);
  31. };
  32. // ------------------------------------------------------------------------
  33. // Matrix implementation
  34. // ------------------------------------------------------------------------
  35. #ifndef local_max
  36. #define local_max(a, b)  (((a) > (b)) ? (a) : (b))
  37. #endif
  38. #ifndef local_min
  39. #define local_min(a, b)  (((a) < (b)) ? (a) : (b)) 
  40. #endif
  41. /////////////////////////////
  42. // constructor and destructor
  43. /////////////////////////////
  44. template <typename T> FeMatrix<T>::FeMatrix(int m_, int n_, const T& v_) : m(m_), n(n_) {
  45. int i;
  46. (*this).resize(m);
  47. for(i=0;i<m;i++) (*this)[i].resize(n);
  48. for(i=0;i<m;i++) for(int j=0;j<n;j++)  (*this)[i][j]=v_;
  49. }
  50. template <typename T> inline FeMatrix<T>::~FeMatrix() {
  51. }
  52. /////////////////////////////
  53. // operator overloading
  54. /////////////////////////////
  55. template <typename T> inline FeMatrix<T>& FeMatrix<T>::operator=(const FeMatrix<T>& A) {
  56. if(this == &A) return *this;
  57. if ( A.n != n || A.m != m) Resize(A.m, A.n);
  58. //for(int i=0;i<m;i++) for(int j=0;j<n;j++)  (*this)[i][j]=A[i][j];
  59. for(int i=0;i<m;i++) (*this)[i]=A[i];
  60. return *this;
  61. }
  62. template <typename T> FeMatrix<T>& FeMatrix<T>::operator=(const T& a) {
  63. for(int i=0; i<m; ++i) for(int j=0;j<n; ++j) (*this)[i][j] = a;
  64. return *this;
  65. }
  66. /////////////////////////////
  67. // member functions
  68. /////////////////////////////
  69. template <typename T> int FeMatrix<T>::Resize(int new_m, int new_n) {
  70. if(new_m==m && new_n==n) return 1;
  71. // must preserve data
  72. int i;
  73. for(i=0;i<local_min(m,new_m);i++) { (*this)[i].resize(new_n); }
  74. (*this).resize(new_m);
  75. for(i=m;i<new_m;i++) { (*this)[i].resize(new_n); }
  76. m=new_m; n=new_n;
  77. return 1;
  78. }
  79. #endif