Я делаю матричный класс в 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;
};
Я также хотел бы создать некоторые функции для управления этой структурой.
Я видел код, похожий на этот, который часто используется, но я не вижу, как это создает массив, который содержит указатели на другие массивы. Эта концепция сбивает меня с толку, и я просто хотел бы, чтобы кто-то разъяснил мне, как я должен делать то, что я хочу делать.
Я хочу, чтобы класс был изолирован и не имел никакого отношения к вводу. Скорее всего, он будет вызван в другом коде и использует мои функции для создания структуры матрицы. Создание массива указателей не является для меня запутанной частью, оно заставляет эти указатели указывать на другие массивы, а размер указателей увеличивается в зависимости от количества входных записей.
#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;
}
}
РЕЗУЛЬТАТ:
[0] [0] 0 [0] [1] 1 [0] [2] 2 [0] [3] 3 [1] [0] 10 [1] [1] 11 [1] [2] 12 [1] [3] 13 [2] [0] 20 [2] [1] 21 [2] [2] 22 [2] [3] 23Других решений пока нет …