簡體   English   中英

2D可變大小數組C ++

[英]2D variable sized array c++

我想熟悉c ++中的2D可變大小數組,所以我寫了一個小程序,但是沒有用。 這是代碼:

#include <iostream>

using namespace std;

int main(){
int a,i;
cin>>a; //the width of the array is variable
int **p2darray;
p2darray = new int*[2]; //the height is 2
for (i = 0; i < 2; i++){
    p2darray[i] = new int[a];
}
i=0;
while(i!=a){
    p2darray[0][i]=i; //filling some numbers in the array
    p2darray[1][i]=2*i;
    i++;
}
i=0;
while(i!=a){
    cout<<p2darray[0][i]<<endl;
    cout<<p2darray[1][i]<<endl;
    i++;
}
return 0;
}

那為什么不起作用呢?

主要問題是,當您說p2darray[i][0] ,索引向后,因為您將第二個維設置為用戶輸入的大小,但是您將第一個維增加為該數字。 這通常會導致段錯誤。 在所有四種情況下都應為p2darray[0][i] 您也沒有在進入打印循環之前將i設置為0,因此它跳過了整個打印過程。

有關說明上述更正的正在運行的程序, 請參見此處

你忘了重設i

i=0;
while(i!=a){
    p2darray[i][0]=i; //filling some numbers in the array
    p2darray[i][1]=2*i;
    i++;
}
// Now i == a, so the next loop doesn't run
while(i!=a){
    cout<<p2darray[i][0]<<endl;
    cout<<p2darray[i][1]<<endl;
    i++;
}

插入i = 0; 在兩個循環之間。

同樣,索引的順序錯誤,第一個索引只能采用值0和1,否則將訪問分配區域之外的內存。

i=0;
while(i!=a){
    p2darray[0][i]=i; //filling some numbers in the array
    p2darray[1][i]=2*i;
    i++;
}
i = 0;
while(i!=a){
    cout<<p2darray[0][i]<<endl;
    cout<<p2darray[1][i]<<endl;
    i++;
}

是正確的。

為什么不將2d數組放入函數中。

#include <iostream>

using namespace std;

int** CreateArray(int valuea, int valueb)
{
     int** array;
     array = new int *[valuea];
     for(int i =0;i< row;i++)
     {
         array[i] = new int [valueb];
     }
     return array;
}

然后,您一定不要忘記返回內存。

int main(){
int a;
int i = 0;

cin>>a;
int** array = CreateArray(a,i);

while(i!=a){
  array[i][0]=i;
  array[i][1]=2*i;
  i++;
}
i=0;
    while(i!=a){
      cout<<array[i][0]<<endl;
      cout<<array[i][1]<<endl;
      i++;
 }
return 0;
}

C ++中的2D可變大小數組

 #include <bits/stdc++.h>
 using namespace std;

 int main(){

int row,col,i,j;
cin>>row;                    //no. of rows
string col_size;             //mapping index to no.of columns     

vector<vector<int> >Arr(row);

for(i=0; i<row ; i++){
  cin>>col;
  col_size.push_back(col);    // no. of columns at ith row 
  Arr[i]=vector<int>(col);
       for(j=0 ; j < col_size[i] ; j++)
             cin>>Arr[i][j];
}

                      //printing the 2D Array

for(i=0; i<row ; i++){
       for(j=0 ; j<col_size[i] ;j++){
              cout<<Arr[i][j]<<" ";
   }
    cout<<"\n";
   }
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM