(本文中的代码直接粘贴在main函数下即可使用,部分代码需在最后一行添加return 0;)

(用到的头文件:#include <vector>
        #include <iostream>
        #include <iomanip>   )

静态二维数组的声明:

C++中,创建2维数组可以使用最简单的命令:

int a[2][3]={{1,2,3},{4,5,6}};

这种类型的数组在编译时就已经分配好了内存,若我们要建立一个在运行时才决定大小的数组,则不能使用这种方法,如果用下列声明创建数组:

int size;
 cin >> size;
 int matrix2D[size][size];

则会报错:

动态二维数组java 动态二维数组语法_ci

在运行时才确定大小的数组叫做动态数组,动态数组不能够在编译时被分配空间。

一维动态数组的声明:

若要让系统在运行时才分配空间给数组,则需要使用特殊方法,下面是在C++中创建一维动态数组的方法:

1  int size;            //声明数组尺寸
 2  int i;               //循环控制变量
 3 
 4  cout << "Please enter the size: ";
 5  cin >> size;          //输入数组尺寸
 6  int *matrix1D = new int[size];  //创建数组
 7 
 8  for (i = 0; i < size; i++)
 9   matrix1D[i] = rand() % 10;   //按顺序赋值
10 
11  for (i = 0; i < size; i++)
12   cout << matrix1D[i] << " ";    //按顺序读取
13 
14  delete[] matrix1D;          //释放空间

 

运行结果如下:

动态二维数组java 动态二维数组语法_动态二维数组java_02

在上述程序第6行的代码中, new运算符返回第一个元素的地址,该地址被赋予指针matrix1D。

由于matrix1D指向数组中的第一个元素,*matrix1D即为数组第一个元素的值,但是在C/C++中,matrix1D[0]可以直接指代数组中的第一个元素,对于第二个元素,可以使用matrix1D[1]操作。

二维动态数组的声明:

1 int size_row,size_column;
 2     int r,c;
 3     cout << "Please enter the size of row: ";
 4     cin >> size_row;
 5     cout << "\nPlease enter the size of column: ";
 6     cin >> size_column;
 7 
 8     int **matrix2D = new int*[size_row];
 9     for (r = 0; r < size_row; r++)
10         matrix2D[r] = new int[size_column];      //创建数组
11 
12     for (r = 0; r < size_row; r++)
13         for (c = 0; c < size_column;c++)
14         matrix2D[r][c] = rand() % 10;            //赋值
15 
16     for (r = 0; r < size_row; r++)
17     {
18         cout << endl;
19         for (c = 0; c < size_column; c++)
20         {
21             cout << matrix2D[r][c] << " ";
22         }
23     }                                    //读取
24         
25     for (int r = 0; r < size_row; r++)
26     {
27         delete matrix2D[r];
28         matrix2D[r] = NULL;    
29     }
30     delete[size_row]matrix2D;
31     matrix2D = NULL;                        //释放

运行结果如下:

动态二维数组java 动态二维数组语法_数组_03

对于2维数组可以将其理解为几个一维行向量的叠加。

代码第8行中 , 声明 matrix2D是列向量matrix2D[0] matrix2D[1] matrix2D[2]的指针,向量中的元素个数与总行数相等。

9,10行的循环表示这个列向量中的每个元素都是一个行向量的指针,即matrix2D[0]是行向量matrix2D[0][1] matrix2D[0][2] matrix2D[0][3] matrix2D[0][4]的指针,这个道理与一维动态数组一致。

 

使用二维动态数组时可以直接使用例如matrix2D[1][2]来指代第二行第3列的元素。

释放2维动态数组时也与1维有所不同,除了上述代码中的方法外,比较通用并且简便的方法有:

for (int r = 0; r < size_row; r++)
    delete[] matrix2D[r];    
delete[] matrix2D;                        //释放

第1,2行先释放每行中分配的空间 即指针数组(matrix2D[0] matrix2D[1] matrix2D[2])每个元素指向的数组,如(matrix2D[0][0],matrix2D[0][1],matrix2D[0][2],matrix2D[0][3],...,)。

第3行再释放这个指针数组。

 

二维动态数组的建立也可以用模板类vector:

使用vector之前要加载头文件#include <vector>

1 int row, column;
 2     int r, c;
 3     cout << "Please enter the row" << endl;
 4     cin >> row;
 5     cout << "Please enter the column" << endl;
 6     cin >> column;
 7 
 8     vector<vector<int> > vector2D(row, vector<int>(column));
 9 
10     for (r = 0; r < row; r++)
11     {
12         for (c = 0; c < column; c++)
13             vector2D[r][c] = rand() % 10;
14     }
15     
16     for (r = 0; r < row; r++)
17     {
18         for (c = 0; c < column; c++)
19         {
20             cout << setw(2)<< vector2D[r][c] ;
21         }
22         cout << endl;
23     }

使用方法如上,声明时int后两个> >中间一定要有空格,否则会被认为是重载。