我必须实现一个代码来生成一个2D数组。给定N和L,它们是数组的大小。我需要生成矩阵A,例如
for i=1 to N
for j=1 to L
if(random(0,1)>0.5)
A[i][j]=1;
else
A[i][j]=0;
end
end
end
让以上所有代码调用intial()
函数。设N = 10; L = 100;如何使函数initial()返回一个2D数组A.谢谢
这是我的代码
const int N=10;
const int L=100;
int A[N][L];
int [][] initialization()
{
for (int i=0;i<10;i++)
for (int j=i;j<100;j++)
{
if(random(0,1)>0.5)
A[i][j]=1;
else
A[i][j]=0;
}
return A;
}
答案 0 :(得分:2)
您已经宣布了一个二维数组
const int N=10;
const int L=100;
int P[N][L];
声明函数如
void initial( int a[][L], size_t n );
并将其称为
initial( P, N );
或者在C ++中,你可以定义像
这样的函数void initial( int ( &a )[N][L] );
甚至你可以返回对数组的引用
int ( & initial( int ( &a )[N][L] ) )[N][L];
如果N和L不是常数,那么最好使用std::vector<std::vector<int>>
代替数组。
或者如果在编译时已知列数,则可以定义std :: array的向量。例如
std::vector<std::array<int, L>>
如果是必须创建数组的函数,则可以动态分配数组。有两种方法。第一个
int ** initial( size_t n, size_t m )
{
int **a = new int * [n];
for ( size_t i = 0; i < n; i++ ) a[i] = new int [m];
return a;
}
此功能不安全,因此最好使用std::unique_ptr
等智能指针。
或者如果列数是常数,那么
int ( * initial( size_t n ) )[L]
{
int ( *a )[L] = new int [n][L];
return a;
}