如何用简单的方法在C ++中返回2D数组

时间:2015-03-30 17:41:14

标签: c++

我必须实现一个代码来生成一个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;
}

1 个答案:

答案 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;
}