【问题标题】:Matrix class and zero-parameter issue矩阵类和零参数问题
【发布时间】:2014-09-19 22:25:30
【问题描述】:

我正在尝试创建一个矩阵类,到目前为止,我已经创建了一个可以创建向量向量的成员,但如果需要,我不确定如何调整向量的大小。

EX:resizeArray(3,3) 应该返回一个 3x3 向量。

另外,由于某种原因,当我调用默认成员 matrix() 时,我收到一条错误消息,提示... “请求 myMatrix 中的成员 numrows,其类型为 matrix[][]” 我不完全确定这是什么要求,也无法在其他地方找到合适的答案。

提前致谢

    #include <iostream>
#include <vector>
using namespace std;

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

    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; 
    }

    void resizeArray(int rows, int cols)
    {

         }

    private:
        vector< vector<Object> > array;
        int rows;
        int cols;
};


int main()
{
    matrix<int> myMatrix(3,2);
    //matrix<int> myMatrix1();
    cout << myMatrix.numrows();
    cout << "\n";
    cout << myMatrix.numcols();
    system("PAUSE");
    return 0;
}

【问题讨论】:

  • 你可以从我添加到stackoverflow.com/questions/17259877/… 的例子中得到一个想法。 (请注意,它是一维矩阵类。)
  • 这是一个很好的链接,但最终我的问题是我不知道如何将矩阵传递给我的函数然后调整它的大小。我知道我应该能够以与创建对象的方式类似的方式执行此操作,但我无法提出可行的解决方案。

标签: c++ class matrix vector


【解决方案1】:

您可能希望避免在这样的矩阵类中使用向量向量。它会导致不连续的内存分配,从而减慢执行速度。内部向量也增加了不必要的开销。您可以考虑使用大小为n*m 的单个向量,其中nm 分别是行数和列数。调整大小也更容易。

我使用的是 gcc 4.8.1,你的代码可以工作。

【讨论】:

    【解决方案2】:
    #include <iostream>
    #include <vector>
    using namespace std;
    
    template <typename Object>
    class matrix
    {
    public:
       matrix( )
           : array( 1 )
       {
           rows = 1;
           cols = 1;
           for( int i = 0; i < rows; i++ )
               array[ i ].resize( cols );
       }       
    
       matrix( int rows, int cols ) // you forgot to assign the members rows and cols
           : array( rows ), rows(rows), cols(cols)
       {
           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; 
       }
    
       void resizeArray(int rows, int cols)
       {
           this->rows = rows;
           this->cols = cols;
           array.resize(rows);
           for(int i = 0; i < rows; i++)
               array[i].resize(cols);
       }
    
    private:
        vector< vector<Object> > array;
        int rows;
        int cols;
    };
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2015-11-08
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2013-11-04
      相关资源
      最近更新 更多