C ++ Multi-Dimensional Arrays糟糕的多余代码

时间:2015-07-04 00:21:21

标签: c++ arrays dynamic multidimensional-array

我试图创建一个具有不同尺寸的矩阵,它适用于5乘3或3乘3,但如果我尝试制作2乘3矩阵,那么我得到一个糟糕的多余代码。换句话说,如果我试图让我的x在我的(x,y)对中小于我的y,那么我就会变得过剩。

在我的头文件中,我有:

#ifndef fasdf_dynn_h
#define fasdf_dynn_h

#include <iostream>
#include <fstream>
#include<string>
#include <cstdlib>
#include <vector>

using namespace std;
template <class T>

class MatrixdynVector{

public:
    MatrixdynVector();
    MatrixdynVector(int m,int n);
    MatrixdynVector(T diagonal, int n, int m);

    template <class H>
    friend ostream& operator <<(ostream& outs, const MatrixdynVector<H> &obj);

private:
    int m,n;
    int** matrix;
};


#endif

在我的cpp文件中我有:

#include "dynn.h"

template <class T>
MatrixdynVector<T>::MatrixdynVector(){

    //creates a 3 by 3 matrix with elements equal to 0
    m=3;
    n=3;

    matrix=new int*[m];

    for(int i=0;i<m;i++)
        matrix[i]=new int[n];

    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            matrix[i][j]=0;


}

template <class T>
MatrixdynVector<T>::MatrixdynVector(int x,int y)
{
    //creates a matrix with dimensions m and n with elements equal to 0

    m=x;
    n=y;

    matrix=new int*[m];

    for(int i=0;i<m;i++)
        matrix[i]=new int[n];

    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            matrix[i][j]=0;
}


template <class T>
ostream& operator <<(ostream& outs, const MatrixdynVector<T> & obj)
{
    for (int i = 0; i < obj.m; i++){
        for (int j = 0; j < obj.n; j++)
            outs << " "<< obj.matrix[i][j];
        outs<<endl;
    }
    outs<<endl;
    return outs;
}

int main()
{
    MatrixdynVector<int> B;//works fine
    MatrixdynVector<int> A(2,3);//bad excess 


    cout<<B;
    cout<<A;
}

1 个答案:

答案 0 :(得分:1)

在两个构造函数中创建矩阵时,内部循环初始化j,然后递增i。我认为这就是问题所在。

我建议另外一种方法来分配矩阵:

int *data = new int[m * n];
int **matrix = new int*[m];
for (int r = 0; r < m; ++r)
    matrix[r] = &(data[r * n]);

我假设你有m行和n列。您可以减少分配并清理它,只需删除matrixdata指针即可。