2D可变大小阵列c++

2D variable sized array c++

本文关键字:阵列 c++ 2D      更新时间:2023-10-16

我想熟悉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]时,您的索引是向后的,因为您将第二个维度设置为用户输入的大小,但您将第一个维度递增为该数字。这通常会导致segfault。在所有四种情况下都应该是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;
}