C++ 多维数组

2025年8月29日 | 阅读11分钟

多维数组在 C++ 中也称为矩形数组。它可以是二维或三维的。数据以表格形式(行-列)存储,也称为矩阵。它是同类项目的集合,其中每个元素都使用多个索引访问。

C++ 中多维数组的语法

考虑一个语法来演示 C++ 中的多维数组。

  • data_type: 它指定元素的类型(例如,int、float、char)。
  • size1: 行数。
  • size2: 列数。

示例

让我们看一个简单的例子来初始化 C++ 中的多维数组。

示例

编译并运行

输出

5 10 0 
0 15 20 
30 0 10 

这里,我们使用了一个整数类型的二维数组。array1 声明为 3 行 3 列,总共包含 9 个整数元素。

C++ 多维数组的大小

在一维数组中,数组的大小是通过元素数量乘以每个元素的大小来计算的。对于多维 数组,添加每个维度都会影响数组的总大小,使其大小计算更加复杂。元素的总数是通过将所有维度的大小相乘来确定的,类似于二维中的面积计算和三维中的体积计算。

考虑一个例子;

  • 这里,数组 int array1[3][2] 可以存储总共 6 个元素。
  • 使用 sizeof() 运算符,我们可以以字节为单位计算数组的大小。
  • 在这种情况下,字节大小 = 3*8 = 24 字节。

代码实现

让我们看一个例子来演示 C++ 中多维数组的大小。

示例

编译并运行

输出

Total no of bytes: 24

C++ 中的二维数组

C++ 提供了二维数组,它使用数组的数组组织方式来表示表格形式的数据,例如矩阵和表格。该结构包含通过两个索引集定义其位置的维元素。

在 C++ 中创建二维数组

为了声明一个二维数组,我们可以使用以下语法在 C++ 中创建一个二维数组。

语法

它具有以下语法:

data_type array_name[rows][columns];

  1. data_type: 它指定元素的类型(例如,int、float、char)。
  2. Rows: 行数。
  3. Columns: 列数。

示例: 声明二维数组

int matrix[3][3];  // 创建一个 3x3 矩阵(二维数组)

初始化二维数组

二维数组可以通过不同的方式初始化

a) 声明时初始化

在此方法中,在声明时将值分配给数组元素。

结果矩阵

1  2  3  
4  5  6  
7  8  9  

说明

此示例创建一个 3×3 矩阵并使用给定值对其进行初始化。元素按行主序存储。第一行包含 {1, 2, 3},第二行包含 {4, 5, 6},第三行包含 {7, 8, 9}。

b) 部分初始化

在此方法中,如果我们提供的元素少于所需数量,则其余元素会自动初始化为 0。

结果矩阵

1 2 0
3 4 0
5 0 0

说明

仅提供特定值,其余自动设置为 0。第一行包含 {1, 2, 0},第二行包含 {3, 4, 0},第三行包含 {5, 0, 0}。

c) 手动初始化

初始化二维数组的另一种方法是手动为单个元素赋值。

结果矩阵

1  2  ?  
?  ?  5  
?  ?  ?  

说明

在这里,我们明确地将值分配给数组中的特定位置。其余位置未初始化(包含垃圾值,如果是全局/静态数组则为 0)。

遍历二维数组

数组遍历表示程序员可以访问和打印数组结构中包含的所有元素的过程。

示例

编译并运行

输出

1 2 3 
4 5 6

更新二维数组

更新二维数组中的元素需要使用其索引值。

说明

arr[1][2] = 9; 更新第二行第三列的值。数组大小不变,仅值发生变化。

访问二维数组中的元素

让我们看一个例子,演示如何在 C++ 中访问二维数组中的元素。

示例

编译并运行

输出

Accessed Element: 6

C++ 中的三维数组

C++ 中的三维数组实现通过在行和列的基础上添加深度来扩展二维数组结构,从而将元素组织成多层。该变体表示三维体积数据以及多层对象和三维矩阵。

在 C++ 中创建三维数组

三维数组的声明取决于三个连续的数组索引。

语法

它具有以下语法:

  • data_type: 它指定元素的类型(例如,int、float、char)。
  • Depth: 层数(切片)。
  • Rows: 每层的行数。
  • Columns: 每行中的列数。

示例: 声明三维数组

初始化三维数组

有几种初始化三维数组的方法。

a) 声明时初始化

在 C++ 中,我们可以在声明期间直接为所有元素赋值。

说明

第一层 { {1, 2}, {3, 4} } 包含两行。第二层 { {5, 6}, {7, 8} } 遵循相同的结构。

b) 部分初始化

在 C++ 中,我们可以在声明期间部分赋值给所有元素。

结果三维数组

Layer 1:
1 0
3 4
Layer 2:
5 6
7 0

c. 手动初始化

在 C++ 多维数组中,使用索引逐个赋值。

遍历三维数组

遍历三维数组需要实现三个连续的循环操作。

示例

让我们看一个例子来演示如何在 C++ 中遍历三维数组。

示例

编译并运行

输出

1 2 3 
4 5 6 

7 8 9 
10 11 12

更新三维数组

更新一个特定元素需要同时使用三个索引。用户需要三个处理层、行和列的 循环

示例

编译并运行

输出

Updated value at arr[1][0][2]: 99

说明

给定的代码定义了一个 3D 数组 arr[2][2][3],表示 2 层、2 行和 3 列。它使用预定义值初始化数组,然后将第 1 层、第 0 行、第 2 列的元素更新为 99。更新 3D 数组中的特定元素需要三个索引,并且遍历所有元素通常涉及三个嵌套 循环

访问三维数组中的元素

可以使用其特定的层、行和列索引以 'array[layer][row][column]' 格式访问三维数组中的元素。

示例

编译并运行

输出

Accessed Element: 12

C++ 多维数组示例:同时声明和初始化

让我们看一个多维数组的简单例子,它在声明时初始化了该数组。

示例

编译并运行

输出

2 5 5
4 0 3
9 1 8

将多维数组传递给函数

C++ 要求用户在将多维数组传递给函数时列出所有非第一个的数组维度。编译器使用此信息来计算精确的内存偏移量,从而实现元素访问。

语法

它具有以下语法:

必须指定列数,而行数可以省略。

示例:传递二维数组

示例

编译并运行

输出

2D Array Elements:
1 2 3
4 5 6

C++ 多维数组的要点

C++ 多维数组有几个重要的要点。C++ 多维数组的一些主要要点如下:

  • 初始化具有多个维度的数组:我们可以初始化具有多个维度的数组,例如三维(立方体)或更多维。尽管启动和遍历概念保持不变,但每个附加维度都需要自己的循环。
  • 获取元素:多维数组的元素通过利用其索引来访问。Arr[i][j] 表示二维数组的第 i 行和第 j 列的组件。
  • 多维数组的大小和存储:每个维度中的元素数量决定了多维数组的大小。数组所有已分配内存的总和是使用其所有维度的大小计算的。应谨慎使用大型数组,因为它们会占用大量内存。
  • 指针数组:指针数组也可以用来生成多维数组。在这种情况下,数组的每一行都充当另一个数组(列)的指针。因此,内存分配选项更加灵活,并且现在可以处理不同的行长度。
  • 将多维数组传递给函数:当将多维数组传递给函数时,我们必须提供除第一个维度之外的每个维度的大小。这是为了让编译器可以在不猜测这些维度大小的情况下确定内存偏移量。
  • 动态内存分配:指针和 new 运算符(或 C 中的 malloc)可以动态分配多维数组的内存。通过这样做,我们可以创建维度可以实时更改的灵活数组。
  • STL 容器:为了在 C++ 中生成动态多维数组,请使用 std::vector 等 STL 容器。它预先配备了安全性、适应性和内存管理。

常见问题解答 (FAQs)

1. C++ 中的多维数组是什么?

C++ 中的多维数组包含多个维度,这使其能够以定义的表格或矩阵结构存储信息。二维数组 (2D arrays) 作为最流行的多维构造,而 C++ 支持三维 (3D)、四维 (4D) 和其他更高维数组。

2. 我们为什么要使用多维数组?

  • 多维数组支持表示矩阵和网格,例如棋盘和游戏板。
  • 该数组维护表格信息,例如学生科目分数数据。
  • 二维数组结构通过维护像素信息来服务于图像处理功能。
  • 多维数组在科学计算和图形相关挑战中找到应用,例如图论中的邻接矩阵。

3. C++ 中多维数组的优缺点是什么?

优点

  • 数组结构支持高效的数据存储,最适用于网格表格和矩阵系统。
  • 元素访问变得更快,因为直接索引允许从行和列轻松检索。

缺点

  • 当不使用动态分配的内存时,大型数组会占用大量内存空间。
  • 在复杂格式中使用多个索引在尝试访问元素时可能会产生错误。

4. C++ 中如何声明二维数组?

二维数组使用以下语法声明

5. C++ 编程语言中存在哪些多维数组?

C++ 多维数组的结构和内存安排允许将其分类为多个类别

二维数组

  • 行-列结构构成了编程中最常用的多维数组的基础。
  • 二维数组非常适合存储表格信息以及矩阵和网格。

三维数组

  • 三维数组实现二维数组结构,同时添加一个额外的深度属性。
  • 多维数组服务于图像处理和科学模拟等应用。

高维数组

  • 数组通常由四个或更多维度组成,但在实际应用中仍然很少见。

高阶数组主要用于高级数学计算和模拟。