2017-09-26 18 views
0

C++에서 템플릿 기반 행렬 클래스를 만들고 있습니다. 이 클래스를 만들려면 포인터 배열을 만들고 그 포인터는 동적 배열을 가리 킵니다.C++ 템플릿 클래스 배열에 대한 포인터의 동적 배열

지금까지 내가 가진 :

template<typename T> class Matrix 
    { 
    public: 
     //constructor 
     int **m = new int*[_rows]; 
     for (int i = 0; i < _rows; i++) 
     { 
      m[i] = new int[_cols]; 
     } 

     //destructor 
     for (int i = 0; i < _rows; i++) 
     { 
      delete[] m[i] 
     } 
     delete[] m; 
    }; 

나는 또한이 구조를 조작하는 일부 기능을 만들고 싶습니다. 이 코드는 많이 사용되었지만 다른 배열에 대한 포인터가 들어있는 배열을 만드는 방법을 보지 못했습니다. 이 개념은 나에게 혼란스럽고 나는 누군가가 내가하고 싶은 일을 어떻게해야하는지 분명히 밝히고 싶다.

클래스를 분리하여 입력과 관련이 없기를 원합니다. 그것은 다른 코드에서 호출 될 것이고 매트릭스 함수를 만들기 위해 함수를 사용할 것입니다. 포인터의 배열을 만드는 것은 나에게 혼란스러운 부분이 아니다. 포인터가 다른 배열을 가리키고 포인터의 배열이 얼마나 많은 입력 항목이 있는지에 따라 크기가 커진다.

+1

여러분의 삶을 편하게 만들고 포인터와 원시 메모리 관리 대신에'std :: vector'를 사용하십시오. – PaulMcKenzie

+0

고맙습니다. 개념적으로, 내가 동적으로 할당 된 배열을 사용하여 가능한 일을하려고합니까? – AustinGlad

+0

물론 가능합니다. 내부적으로 벡터는 어떻게 작동합니까? 그것은 당신이하려고하는 것과는 아무런 차이가 없으며 단지 안전합니다. 둘째, 동적 배열 관리를 사용하여 Matrix 클래스를 개발하거나 학습하려는 목표는 무엇입니까? Matrix 클래스를 개발하는 경우 'vector'를 사용하면 Matrix 클래스 개발의 실제 작업을 수행 할 수 있습니다. – PaulMcKenzie

답변

0
#include <iostream> 

using namespace std; 

template<typename T> class Matrix 
{ 
public: 
    Matrix(int row, int col) 
    { 
     _rows = row; 
     _cols = col; 
     m = new T*[_rows]; 
     for (int i = 0; i < _rows; i++) 
     { 
      m[i] = new T[_cols]; 
      for(int j=0; j < _cols; j++) 
      { 
       m[i][j] = i*10 + j; 
      } 
     } 
    } 

    ~Matrix() 
    { 
     for (int i = 0; i < _rows; i++) 
     { 
      delete[] m[i]; 
     } 
     delete[] m; 
    } 

    T **m; 
    int _rows; 
    int _cols; 
}; 

void main() 
{ 
    Matrix<int> a(3,4); 

    for(int i=0; i<a._rows; i++) 
    { 
     for(int j=0; j<a._cols; j++) 
     { 
      cout << "[" << i << "][" << j << "]" << a.m[i][j] << " "; 
     } 
     cout << endl; 
    } 

} 

RESULT :

[0] [0] [0] [1] [0] [2] 2 [0] [3] 3

[1] [0 10] [1] 11 [1] [2] 12 [1] [3] 13

[2] [1] 21 [2] [2] 22 [2 ] [3] 23