我对动态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
}
}
答案 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]);
}