跳转到内容

C++ 多维数组

来自代码酷

C++多维数组是存储表格状数据的重要数据结构,本质上是“数组的数组”。本教程将系统讲解二维及更高维数组的声明、初始化、访问方式,并结合内存布局分析和实际应用案例。

基本概念[编辑 | 编辑源代码]

多维数组是指每个元素本身也是数组的数组。最常见的形式是二维数组(矩阵)和三维数组(立方体结构)。

  • 数学表示:Am×n 表示m行n列的二维数组
  • 内存分配:多维数组在内存中仍为连续存储,按行优先顺序排列(C++标准)

内存布局示例[编辑 | 编辑源代码]

声明与初始化[编辑 | 编辑源代码]

二维数组语法[编辑 | 编辑源代码]

  
// 声明3行4列的int数组  
int matrix[3][4];  

// 初始化方式1:完整初始化  
int matrix1[2][3] = {  
    {1, 2, 3},  
    {4, 5, 6}  
};  

// 初始化方式2:连续初始化  
int matrix2[2][3] = {1, 2, 3, 4, 5, 6};  

// 初始化方式3:部分初始化(未指定的元素自动置0)  
int matrix3[2][3] = {  
    {1},  
    {4, 5}  
};

高维数组示例[编辑 | 编辑源代码]

  
// 三维数组:2个3x4矩阵  
int cube[2][3][4] = {  
    {  
        {1,2,3,4},  
        {5,6,7,8},  
        {9,10,11,12}  
    },  
    {  
        {13,14,15,16},  
        {17,18,19,20},  
        {21,22,23,24}  
    }  
};

访问与遍历[编辑 | 编辑源代码]

基础访问方式[编辑 | 编辑源代码]

  
#include <iostream>  
using namespace std;  

int main() {  
    int arr[2][3] = {{1,2,3}, {4,5,6}};  

    // 通过下标访问  
    cout << arr[1][2] << endl;  // 输出: 6  

    // 嵌套循环遍历  
    for(int i=0; i<2; i++) {  
        for(int j=0; j<3; j++) {  
            cout << arr[i][j] << " ";  
        }  
        cout << endl;  
    }  
    /* 输出:  
    1 2 3  
    4 5 6  
    */  
    return 0;  
}

指针访问技巧[编辑 | 编辑源代码]

多维数组可视为一维数组的特殊形式:

  
int matrix[3][4];  
int* ptr = &matrix[0][0];  

// 通过指针访问元素  
*(ptr + 2*4 + 3) = 10; // 等价于 matrix[2][3] = 10

实际应用案例[编辑 | 编辑源代码]

案例1:矩阵运算[编辑 | 编辑源代码]

  
// 矩阵加法  
const int ROWS = 3, COLS = 3;  

void addMatrices(int a[ROWS][COLS], int b[ROWS][COLS], int result[ROWS][COLS]) {  
    for(int i=0; i<ROWS; i++)  
        for(int j=0; j<COLS; j++)  
            result[i][j] = a[i][j] + b[i][j];  
}

案例2:游戏地图[编辑 | 编辑源代码]

二维数组可表示游戏网格地图:

  
// 0=空地, 1=墙壁, 2=玩家  
int gameMap[5][5] = {  
    {0,1,0,0,2},  
    {0,1,0,1,0},  
    {0,0,0,1,0},  
    {1,1,0,0,0},  
    {0,0,0,1,0}  
};

高级主题[编辑 | 编辑源代码]

动态多维数组[编辑 | 编辑源代码]

使用指针数组实现动态分配:

  
// 创建动态二维数组  
int** createMatrix(int rows, int cols) {  
    int** matrix = new int*[rows];  
    for(int i=0; i<rows; i++)  
        matrix[i] = new int[cols];  
    return matrix;  
}  

// 释放内存  
void deleteMatrix(int** matrix, int rows) {  
    for(int i=0; i<rows; i++)  
        delete[] matrix[i];  
    delete[] matrix;  
}

性能优化建议[编辑 | 编辑源代码]

  • 行优先顺序访问提升缓存命中率
  • 对小矩阵考虑使用std::array替代原生数组
  • 避免频繁的高维数组内存分配/释放

常见问题[编辑 | 编辑源代码]

模板:Q&A

总结[编辑 | 编辑源代码]

多维数组是C++中处理表格数据的核心工具。关键要点:

  • 内存连续存储,行优先排列
  • 初始化方式灵活多样
  • 与指针系统深度集成
  • 实际应用广泛(矩阵运算、图像处理、游戏开发等)

建议通过实际项目练习掌握,如实现矩阵计算库或简单迷宫游戏。

Syntax error in graphmermaid version 9.1.1