первый вопрос:элегантный способ создания и пропускания многомерного массива в C++?
для известных размеров, нам не нужны новые/таНос для создания
const int row = 3;
const int col = 2;
int tst_matrix[row][col] ={{1,2},{3,4},{5,6}}
однако, не легко пройти этот двумерный массив в другую функцию, не так ли? потому что
int matrix_process(int in_matrix[][])
является незаконным, вы должны указать все размеры, кроме первого. если мне нужно изменить содержимое in_matrix, как я могу легко передать tst_matrix в функцию matrix_process?
второй вопрос: Какой стандартный способ создания 2-мерного массива в C++ с новым? Я не хочу использовать std :: vector и т. Д. Здесь. вот что я придумал, это лучший способ?
int **tst_arr = new int*[5];
int i=0, j=0;
for (i=0;i<5;i++)
{
tst_arr[i] = new int[5];
for (j=0;j<5;j++)
{
tst_arr[i][j] = i*5+j;
}
}
Кроме того, если я прохожу tst_array другой функции, как:
int change_row_col(int **a)
{
.....................
//check which element is 0
for (i=0; i<5; i++)
for(j=0;j<5;j++)
{
if (*(*(a+i)+j)==0) //why I can not use a[i][j] here?
{
row[i]=1;
col[j]=1;
}
}
.....................
}
Кроме того, если я использую ( (а + I) + J), то результат не то, что Я хочу. Вот полное тестирование кода у меня было:
#include <iostream>
using namespace std;
//Input Matrix--a: Array[M][N]
int change_row_col(int **a)
{
int i,j;
int* row = new int[5];
int* col = new int[5];
//initialization
for(i=0;i<5;i++)
{
row[i]=0;
}
for(j=0;j<5;i++)
{
col[j]=0;
}
//check which element is 0
for (i=0; i<5; i++)
for(j=0;j<5;j++)
{
if (*(*(a+i)+j)==0) //why I can not use a[i][j] here?
{
row[i]=1;
col[j]=1;
}
}
for(i=0;i<5;i++)
for (j=0;j<5;j++)
{
if (row[i] || col[j])
{
*(*(a+i)+j)=0;
}
}
return 1;
}
int main()
{
int **tst_arr = new int*[5];
int i=0, j=0;
for (i=0;i<5;i++)
{
tst_arr[i] = new int[5];
for (j=0;j<5;j++)
{
tst_arr[i][j] = i*5+j;
}
}
for (i=0; i<5;i++)
{
for(j=0; j<5;j++)
{
cout<<" "<<tst_arr[i][j];
}
cout<<endl;
}
change_row_col(tst_arr);
for (i=0; i<5;i++)
{
for(j=0; j<5;j++)
{
cout<<" "<<tst_arr[i][j];
}
cout<<endl;
}
for (i=0;i<5;i++)
{
delete []tst_arr[i];
}
delete []tst_arr;
}
Почему вы не хотите использовать 'зЬй :: VECTOR'? –
«Я не хочу использовать std :: vector» У вас есть все основания для этого? – Simone
Ну, если вы не хотите использовать std :: vector, всегда есть boost :: array. – stefaanv