掌握 C++ 多维数组:声明、初始化、嵌套循环遍历与实战
C++ 多维数组完全指南
系统讲解 C++ 二维/三维数组声明、初始化最佳实践、嵌套循环遍历与输入输出实战。
多维数组本质是数组的数组。例如:
int x[3][4];
x 为二维数组,共 12 个元素,可视为 3 行 4 列表格。

三维数组同理:
float x[2][4][3];
总元素 2 × 4 × 3 = 24。
多维数组初始化
同一维数组,但嵌套花括号极大提升可读性。
1. 二维数组初始化
扁平列表虽合法但难读:
int test[2][3] = {2, 4, 5, 9, 0, 19};
推荐嵌套风格:
int test[2][3] = {{2, 4, 5}, {9, 0, 19}};
清晰表达 2 行 3 列。

2. 三维数组初始化
扁平列表极难维护:
int test[2][3][4] = {3, 4, 2, 3, 0, -3, 9, 11, 23, 12, 23, 2, 13, 4, 56, 3, 5, 9, 3, 5, 5, 1, 4, 9};
推荐层级分组:
int test[2][3][4] = {
{{3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2}},
{{13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9}}
};
第一维包含两个 3×4 的块。
示例 1:二维数组遍历输出
#include <iostream>
using namespace std;
int main() {
int test[3][2] = {{2, -5}, {4, 0}, {9, 1}};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 2; ++j) {
cout << "test[" << i << "][" << j << "] = " << test[i][j] << endl;
}
}
return 0;
}
输出
test[0][0] = 2 test[0][1] = -5 test[1][0] = 4 test[1][1] = 0 test[2][0] = 9 test[2][1] = 1
外层循环行,内层循环列,逐元素打印。
示例 2:二维数组用户输入
#include <iostream>
using namespace std;
int main() {
int numbers[2][3];
cout << "Enter 6 numbers: " << endl;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> numbers[i][j];
}
}
cout << "The numbers are: " << endl;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << "numbers[" << i << "][" << j << "]: " << numbers[i][j] << endl;
}
}
return 0;
}
输出
Enter 6 numbers: 1 2 3 4 5 6 The numbers are: numbers[0][0]: 1 numbers[0][1]: 2 numbers[0][2]: 3 numbers[1][0]: 4 numbers[1][1]: 5 numbers[1][2]: 6
示例 3:三维数组遍历
#include <iostream>
using namespace std;
int main() {
int test[2][3][2] = {
{{1, 2}, {3, 4}, {5, 6}},
{{7, 8}, {9, 10}, {11, 12}}
};
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
for (int k = 0; k < 2; ++k) {
cout << "test[" << i << "][" << j << "][" << k << "] = " << test[i][j][k] << endl;
}
}
}
return 0;
}
输出
test[0][0][0] = 1 test[0][0][1] = 2 test[0][1][0] = 3 test[0][1][1] = 4 test[0][2][0] = 5 test[0][2][1] = 6 test[1][0][0] = 7 test[1][0][1] = 8 test[1][1][0] = 9 test[1][1][1] = 10 test[1][2][0] = 11 test[1][2][1] = 12
三层嵌套循环对应三维,模式自然延展至更高维(但复杂度指数增长)。
现代 C++ 替代方案
| 方案 | 头文件 | 优势 |
|---|---|---|
std::array<T, N> | <array> | 固定大小、栈分配、.at() 边界检查、支持范围循环、可作函数参数保持大小信息 |
std::vector<std::vector<T>> | <vector> | 动态行/列、堆分配、自动内存管理 |
std::vector<T> 扁平化 | <vector> | 单次分配、缓存友好、索引计算 i*cols + j |
std::mdspan (C++23) | <mdspan> | 非拥有多维视图、零开销、兼容现有连续内存 |
建议:新代码优先用 std::array 或扁平 std::vector,原生多维数组仅用于遗留互操作或极简场景。
C语言
- 掌握 C# 数组:声明、初始化与核心操作完全指南
- C# 多维数组:二维数组详解与代码示例
- 掌握 C# 锯齿数组:声明、初始化与访问完全指南
- 深入理解 C++ 类型转换:隐式、显式转型与现代 Cast 算符
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
- C++数组传递给函数实战指南
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
- MATLAB 多维数组与特殊数组完全指南
- Java 数组复制技术:全面指南