你能帮我改变动态分配的2D阵列的大小吗?我需要功能改变当前数组大小所需的大小。我发送我的代码为例。感谢
int main()
{
//create array col x row
int **array = new int*[col];
for (int i = 0; i < col; i++)
{
array [i] = new int[row];
}
//add numbers to array
for (int i = 0; i < col; i++)
{
for (int j = 0; j < row; j++)
{
pole[i][j] = i*j;
}
}
/*
call function for change size of matrix ...
for example row to rov+5 and col to col+1 without loss of data
*/
//free memory
for (int i = 0; i < col; i++)
{
delete[] pole[i];
}
delete pole;
}
void resize(int ** & arr)
{
//code
}
答案 0 :(得分:1)
我不确定你想在这里完成什么。可能最简单的方法是在删除之前将旧矩阵复制到较大的矩阵中。如果要真正重新分配内存,并避免使用c ++提供的更复杂的结构,可以使用#include<cstdlib>
和realloc()
所有需要的行和列。但这不被认为是c ++风格。
答案 1 :(得分:0)
这是未经测试的,但希望能给你一些想法;
void create(int ** & arr)
{
//create array col x row
arr = malloc(col * sizeof(int*));
for (int i = 0; i < col; i++)
{
arr [i] = malloc(row * sizeof(int));
}
}
void destroy(int ** & arr)
{
for (int i = 0; i < col; i++)
{
free(arr [i]);
}
free(arr);
}
void resize(int ** & arr,int new_col,int new_row)
{
if (new_col == col)
{
if (new_row == row)
return;
for (int i = 0; i < col; i++)
{
arr [i] = realloc(arr [i],new_row * sizeof(int));
}
}
else if (new_col > col)
{
arr = realloc(arr,new_col * sizeof(int*));
if (new_row != row)
{
for (int i = 0; i < col; i++)
{
arr [i] = realloc(arr [i],new_row * sizeof(int));
}
}
for (int i = col; i < new_col; i++)
{
arr [i] = malloc(arr [i],new_row * sizeof(int));
}
}
else
{
if (new_row != row)
{
for (int i = 0; i < new_col; i++)
{
arr [i] = realloc(arr [i],new_row * sizeof(int));
}
}
for (int i = new_col; i < col; i++)
{
free(arr [i]);
}
arr = realloc(arr,new_col * sizeof(int*));
}
col = new_col;
row = new_row;
}
答案 2 :(得分:0)
我会创建一个具有所需大小,正确行数和正确列数的矩阵,复制旧矩阵的内容并执行新行和新列所需的操作,然后取消分配旧矩阵。