Есть несколько способов сделать это.
Самый простой способ - использовать векторы, и если вам не нравится управлять собственной памятью, это идеально для вас.Однако, поскольку мне нравится управлять своей собственной памятью, и я иногда нахожу этот метод медленным и громоздким, я узнал о других способах.
Самый быстрый способ - это выделить одномерный массив и обработать его.это как бы двумерный массив.Вот пример:
int *array = new int[width*height];
int get_array(int column, int row)
{
return array[row*width + column];
}
delete [] array;
Это можно обобщить до n-го измерения:
int *array = new int[w1*w2*...*wn];
int get_array(int i1, int i2, ..., int in)
{
return array[in*(w1*w2*...*w(n-1)) + i(n-1)*(w1*w2*...*w(n-2)) + ... + i2*w1 + i1];
}
delete [] array;
Если вы хотите иметь возможность иметь различную ширину для каждой строки, то вы можетесделать массив указателей.Это решение медленно инициализируется и очищается, но гибко, настраивается и имеет относительно быстрое время выполнения.Это также может быть очень опасно, если вы совершите ошибку.
int **array = new int*[height];
for (int i = 0; i < height; i++)
array[i] = new int[width(i)];
, в какой момент, чтобы получить к нему доступ, все, что вам нужно сделать, - это, как правило,
array[i][j]
, чтобыОсвободив этот массив, вы должны сделать это построчно
for (int i = 0; i < height; i++)
delete [] array[i];
delete [] array;
Это также может распространиться на n-е измерение.
int **....*array = new int**...*[w1];
for (int i1 = 0; i1 < w1; i1++)
{
array[i1] = new int**..*[w2];
for (int i2 = 0; i2 < w2; i2++)
{
array[i1][i2] = new int**.*[w3];
...
for (int in = 0; in < wn; in++)
array[i1][i2]...[in] = new int[wn];
}
}
for (int i1 = 0; i1 < w1; i1++)
{
for (int i2 = 0; i2 < w2; i2++)
{
...
for (int in = 0; in < wn; in++)
delete [] array[i1][i2]...[in];
...
delete [] array[i1][i2];
}
delete [] array[i1];
}
delete [] array;
Этот тип установки имеет тенденцию разрушать память.Только двумерный массив из них привел бы к неправильному выделению ширины + 1 отдельных массивов.Было бы быстрее просто распределить один большой массив и вычислить индексы самостоятельно.