二维数组

二维数组本质上是一个数组的数组,可以理解为一个表格或矩阵,有行和列两个维度。

二维数组的基本概念

 // 二维数组的逻辑结构
 int matrix[3][4];  // 3行4列的矩阵
 ​
 // 可视化表示:
 // 列:  0  1  2  3
 // 行0 [ ][ ][ ][ ]
 // 行1 [ ][ ][ ][ ]
 // 行2 [ ][ ][ ][ ]

二维数组的声明和初始化

 #include <bits/stdc++.h>
 using namespace std;
 int main() {
     // 1. 声明时指定大小
     int arr1[2][3];  // 2行3列,未初始化,包含随机值
     int arr2[2][3]={};  // 初始化全为0
     
     // 2. 声明并初始化(嵌套花括号)
     int arr3[2][3] = {
         {1, 2, 3}, // 初始化arr2[0]数组
         {4, 5, 6}  // 初始化arr2[1]数组
     };
     
     // 3. 省略内层花括号(按行优先顺序填充)
     int arr4[2][3] = {1, 2, 3, 4, 5, 6};  // 等价于上面
     int arr5[2][3] = {1, 2, 5, 6};  // 等价于{125}{600}
     
     // 4. 部分初始化(未指定的元素自动为0)
     int arr6[2][3] = {
         {1, 2},      // 等价于 {1, 2, 0}
         {4}          // 等价于 {4, 0, 0}
     };
     
     // 5. 省略第一维大小(必须指定第二维)
     int arr7[][3] = {
         {1, 2, 3},
         {4, 5, 6},
         {7, 8, 9}
     };  // 自动推断为3行
     
     return 0;
 }

二维数组的访问和遍历

 #include <bits/stdc++.h>
 using namespace std;
 int main() {
     int matrix[3][4] = {
         {1, 2, 3, 4},
         {5, 6, 7, 8},
         {9, 10, 11, 12}
     };
     
     // 1. 访问单个元素
     cout << matrix[1][2] << endl;  // 输出7
     
     // 2. 修改元素
     matrix[0][0] = 100;
     
     // 3. 使用嵌套循环遍历
     for (int i = 0; i < 3; i++) {          // 遍历行
         for (int j = 0; j < 4; j++) {      // 遍历列
             cout << matrix[i][j] << " ";
         }
         cout << endl;
     }
     return 0;
 }

常用输入输出模板

 #include <bits/stdc++.h>
 using namespace std;
 int main() {
     int n, m; // n代表行,m代表列,
     int a[105][105]={}; // 初始化二维数组
     cin>>n>>m;
     for(int i=1;i<=n;i++){
         for(int j=1;j<=m;j++){
             cin>>a[i][j];
         }
     }
     // 遍历输出数组
     for(int i=1;i<=n;i++){
         for(int j=1;j<=m;j++){
             cout<<a[i][j]<<" ";
         }
         cout<<endl;
     }
     return 0;
 }

扩展内容

  1. 矩阵转置
  2. 矩阵相加
  3. 螺旋遍历
  4. 二维一维数组互转

总结要点

  1. 存储方式:行优先连续存储
  2. 索引:从0开始,arr[行][列]
  3. 初始化:可使用嵌套花括号
  4. 传参:第二维大小必须指定
  5. 内存布局:理解地址计算有助于优化