亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C++ 多维数组:声明、初始化、嵌套循环遍历与实战

C++ 多维数组完全指南

系统讲解 C++ 二维/三维数组声明、初始化最佳实践、嵌套循环遍历与输入输出实战。

多维数组本质是数组的数组。例如:

int x[3][4];

x 为二维数组,共 12 个元素,可视为 3 行 4 列表格。

掌握 C++ 多维数组:声明、初始化、嵌套循环遍历与实战

三维数组同理:

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 列。

掌握 C++ 多维数组:声明、初始化、嵌套循环遍历与实战

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语言

  1. 掌握 C# 数组:声明、初始化与核心操作完全指南
  2. C# 多维数组:二维数组详解与代码示例
  3. 掌握 C# 锯齿数组:声明、初始化与访问完全指南
  4. 深入理解 C++ 类型转换:隐式、显式转型与现代 Cast 算符
  5. 掌握 C++ 运算符:六大类型全解析与实战示例
  6. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  7. 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
  8. C++数组传递给函数实战指南
  9. C++ 数组完全指南:声明、初始化、多维数组与指针技巧
  10. C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
  11. MATLAB 多维数组与特殊数组完全指南
  12. Java 数组复制技术:全面指南