将2D数组复制到C ++中未知大小的其他2D数组

时间:2015-03-31 08:03:59

标签: c++ arrays algorithm

我对动态2D数组返回有疑问。这意味着我不知道返回2D数组的大小(这取决于某些条件)。让我们看看我的问题

N=3; 
A[N][5]={}//Given a 2D array
for i=1 to N
   x=random between 0 and 1
   k=1;
   while(k<N&&x>0.3)

    k++;
    B_i=A_k //Look like copy value of array A to array B at position k

我的问题是我不知道k的值,它取决于(k<N&&x>0.3)。因此,我无法初始化阵列B.你能告诉我一种方法吗?这是我试过的代码

int A[2][5] =
    {
        {1,8,12,20,25},
        {5,9,13,24,26},
        {15,1,5,2,22}
    };


int N=3;
   for(int i=0;i<N;i++) 
   {
   double x=random();//create random number between 0 and 1.
   int k=0;
   while(k<N&&x>0.3)
     {
     k++;
     B[k][4]=A[i][4]; //I have no idea to initial 2D array B
     }
   }

3 个答案:

答案 0 :(得分:1)

你可以使用

std::vector<std::vector<int>> B;
st::vector<int> row;
row.push_back(1);
row.push_back(2);
B.push_bak(row);

st::vector<int> row1;
row1.push_back(3);
row1.push_back(4);
B.push_bak(row1);
以这种方式你将获得数组{{1,2},{3,4}} 或

int** B;
B = new int*[2];
B[0]=new int[2];
B[1]=new int[2];

B[0][0] =1;
B[0][1] =2;
B[1][0] =3;
B[1][1] =4;

答案 1 :(得分:0)

也许你可以使用k不能大于N的事实?

循环

while(k<N && x>0.3)
 k++;
当/如果k等于N(无论x)时,

将始终终止,因此数组B应为

int B[N+1][5];    

编辑: 只是为了澄清 - 关键是k总是在[1..N]的范围内。我不想说k总是变成N.只有那个k不能大于N.

答案 2 :(得分:0)

vector< vector<int> > A;    
int N=3;
   for(int i=0;i<N;i++) 
   {
   double x=random();//create random number between 0 and 1.
   int k=1;
   while(k<N&&x>0.3)
     k++;
   B.push_back(A[i]);
   }
相关问题