+ -
当前位置:首页 → 问答吧 → 用vector<vector<T> >定义template<class T> matrix

用vector<vector<T> >定义template<class T> matrix

时间:2011-12-13

来源:互联网

想用vector<vector<T> > 定义一个matrix<T>的类模板,请问如何实现

作者: linansx037   发布时间: 2011-12-13

#ifndef MATRIX_H
#define MATRIX_H

#include <vector>
using namespace std;

template <typename Object>
class matrix
{
  public:
  matrix( int rows, int cols ) : array( rows ) {
  for( int i = 0; i < rows; i++ )
  array[ i ].resize( cols );
  }

  const vector<Object> & operator[]( int row ) const
  { return array[ row ]; }
  vector<Object> & operator[]( int row )
  { return array[ row ]; }

  int numrows( ) const
  { return array.size( ); }
  int numcols( ) const
  { return numrows( ) ? array[ 0 ].size( ) : 0; }
  private:
  vector< vector<Object> > array;
};

#endif

作者: linansx037   发布时间: 2011-12-13

引用 1 楼 linansx037 的回复:
#ifndef MATRIX_H
#define MATRIX_H

#include <vector>
using namespace std;

template <typename Object>
class matrix
{
public:
matrix( int rows, int cols ) : array( rows ) {
for( int i ……

这就蛮好的呀,你可以再加些方法,然后实现它,

作者: zff869030831   发布时间: 2011-12-13

我觉得完全可以用vector<T>定义matrix
matrix(col*row)用size是col*row的vector就可以
也符合数据操作分离原则,数组存的是原始数据,matrix类只是对数据的处理抽象而已
这样定义的好处是后续矩阵的操作容易实现
比如加减乘除对角化等,还有矩阵的拷贝初始化
特别是矩阵的转置,要是用二维数组,则数据数组要完全重新初始化,而一维数组的只需交换对应数据而已

作者: erqieshi   发布时间: 2011-12-13