Tutorial Study Image

C++ 中的多维数组


2022 年 8 月 27 日, Learn eTutorial
1789

本教程将教您如何在 C++ 中使用多维数组,特别是如何声明、访问和有效地利用它们。

C++ 中的多维数组是什么意思?

当一个数组具有多个维度时,它就被称为多维数组。它是一个由其他数组组成的多级数组。二维数组,也称为二维数组,是最基础的多维数组。  矩阵或具有行和列的表也是二维数组的其他名称。

在 C++ 中,多维数组也称为矩形数组。它可以是二维或三维的。数据以表格格式(行 * 列)存储,也称为矩阵。

我们可以通过创建数组的数组来在 C++ 中创建多维数组。 

N 维数组声明

N 维数组声明在其最通用的形式是


data_type array_ name[size1][size2]...[sizeN];
 
  • data_type:将存储在数组中的数据类型。
  • array_name:数组的名称
  • size1, size2,…size N:它主要确定维的大小

二维数组int two_d[30][40];

三维数组int three_d[50][60][70];

例如:int x[2][5];
在这种情况下,x 是一个二维数组。它最多可以容纳 10 个元素。

多维数组的大小

通过简单地将数组的维度相乘,我们可以确定总共有多少个元素。在上面的示例中,总共有 10 个元素,这只是通过将其维度相乘得到的。

Multi-dimensional arrays in C++

二维数组

多维数组最简单地可以表示为二维数组。二维数组就像矩阵一样,由行和列组成。本质上,一维数组的列表构成了一个二维数组。为了声明一个大小为x,y的二维整数数组,语法如下


type arrayName [ x ][ y ];
 

其中 type 可以是任何有效的 C++ 数据类型,而  arrayName 则是一个有效的 C++ 标识符

具有x行和y列的表可以被视为二维数组。下面展示了一个具有3 行4 列的二维数组。

Multi-dimensional arrays in C++

这里,该表是一个二维数组,在 3 行 4 列中包含 12 个整数值。在声明二维数组时,行大小和列大小都必须用方括号括起来。 

由于 a 是数组的名称,而 ij 是下标,它们分别标识数组中的每个元素,因此 a 中的每个元素都由形式为 a[i][j] 的元素名称标识。

如何在 C++ 中初始化二维数组?

二维数组的初始化有两种过程。

  1. 二维数组的编译时初始化
  2. 二维数组的运行时初始化

1. 二维数组的编译时初始化

如前所述,初始化可以在声明期间完成,其形式为

data_type array_name [row] [column]= {value_1st_element,value_2nd_element,3rd.....};

例如,


int table [2] [3]={

    {10,20,30};

    {40,50,60};      

}

同样可以在一行中定义,这更方便易用。


int table[2][3]={10,20,30,40,50,60};

C++ 提供了一种声明数组的方法,即让第一个索引(行)留空,而必须指定第二个索引(列)。下面的示例表明,在二维数组 table 中,行大小留空,而提供了列大小。


int table[][3]={10,20,30,40,50,60};

编译器不会引发任何错误,因为此语句有效,意味着 C++ 中可以初始化任意数量的行。但是,如果未指定列大小,编译器将引发错误。

int table[][3]  // 有效

int table[3][]   // 无效

初始化后的二维数组可以最好地可视化如下。

Array

2. 二维数组的运行时初始化

我们可以通过 cin 函数来实现二维数组的运行时初始化。通过检查以下程序可以查看这一点。

#include <iostream>
using namespace std;

int main()
{
    int i, j, r, c;
    int M[5][5];

    cout <<"Enter number of rows : ";
    cin >>r;
    cout <<"Enter number of columns :";
    cin >>c;
    cout <<"\n";
    /* Input data to matrix */
    for (i = 0; i < r; i++)
    {
        for (j = 0; j < c; j++)
        {
            cout <<"Data in M[" << i <<"]" <<"[" << j <<"] = ";
            cin >>M[i][j];
        }
 cout <<"\n";

    }

    /* Display the matrix */
    for (i = 0; i < r; i++)
    {
        for (j = 0; j < c; j++)
        {
            cout <<M[i][j];
            cout << "  " ;
        }
        cout <<"\n";
    }

    return 0;
}

输出

Enter number of rows : 2
Enter number of columns :2
Data in M[0][0] = 4
Data in M[0][1] = 5
Data in M[1][0] = 2
Data in M[1][1] = 6
4  5  
2  6 

此程序为您提供了二维数组的清晰图景。数组 M[2][2] 包含 4 个元素,2 行 2 列。由于程序是为了显示一个 2 x 2 矩阵,因此行数和列数均指定为 2。接下来为每个位置分配元素,最后使用 cout 函数和 嵌套 for 循环显示矩阵。

访问二维数组的元素

下标,即数组的行索引和列索引,用于访问二维数组中的元素。

例如,

int val = a[2][3];

上面的语句将从数组的第三行获取第四个元素。 

访问二维数组的元素


#include <iostream>
using namespace std;
 
int main () {
   // this ia an array with 5 rows and 2 columns.
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
 
   // output each array element's value                      
   for ( int i = 0; i < 5; i++ )
      for ( int j = 0; j < 2; j++ ) {
      
         cout << "a[" << i << "][" << j << "]: ";
         cout << a[i][j]<< endl;
      }
 
   return 0;
}

输出

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

如前所述,数组可以有任意数量的维度,尽管您创建的大多数数组可能是具有一维或二维的。

C++ 中的三维数组

在 C++ 编程中,我们可以处理具有多个维度的数组。3 维数组的语法是

data_type array_name [row][column][pages]= {value_1st_element,value_2nd_element,3rd.....};

例如,

int arr[10][10][10];

此数组将在编译器内存中分配 10X10X10=1000 个元素。

3D 数组可以如下所示。

Array

如何初始化三维数组

三维数组的初始化与二维数组非常相似。请观察下面的示例


int test[3][3][3] = {
    {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}},
    {{10, 11, 12}, {13, 14, 15}, {16, 17, 18}},
    {{19, 20, 21}, {22, 23, 24}, {25, 26, 27}}
};

这可以像下面这样展开。

Array

三维数组示例

让我们来看一个三维数组的例子


int test[2][3][4] = { 0, -3, 9, 11,3, 4, 2, 3, 13, 4, 56, 3,23, 12, 23, 2,  5, 9, 3, 5, 5, 1, 4, 9};

以下是初始化三维数组的更好方法


int test[2][3][4] = { 
  { {0, -3, 9, 11}, {3, 4, 2, 3}, {13, 4, 56, 3} },
  {{23, 12, 23, 2}, {5, 9, 3, 5}, {5, 1, 4, 9} }
};

请注意三维数组的维度。

Multi-dimensional arrays in C++
  1. 第一个维度的值为 2。因此,构成第一个维度的两个元素似乎是
    Multi-dimensional arrays in C++
  2. 第二个维度的值为 3。请注意,第一个维度的每个元素都有三个分量或元素。
    Multi-dimensional arrays in C++
  3. 最后,第二个维度的每个元素包含四个 int 数字。
    Multi-dimensional arrays in C++

存储和显示用户在三维数组中输入的值的 C++ 程序。


#include <iostream>
using namespace std;

int main() {
    // This array have the capacity to store upto 12 elements (2x3x2)
    int test[2][3][2] = {
                            {
                                {11, 12},
                                {13, 14},
                                {15, 16}
                            }, 
                            {
                                {17, 18}, 
                                {19, 20}, 
                                {21, 22}
                            }
                        };

    // Displaying the values with proper index.
    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] = 11
test[0][0][1] = 12
test[0][1][0] = 13
test[0][1][1] = 14
test[0][2][0] = 15
test[0][2][1] = 16
test[1][0][0] = 17
test[1][0][1] = 18
test[1][1][0] = 19
test[1][1][1] = 20
test[1][2][0] = 21
test[1][2][1] = 22

然而,由于我们操作的是三个维度,所以我们使用嵌套 for 循环,总共有三个循环,而不是两个。

  • 最外层循环访问数组的第一个维度,从 I == 0 到 I == 1。
  • 中间循环访问数组的第二个维度,从 j == 0 到 j == 2。
  • 最内层循环访问数组的第三个维度,从 k == 0 到 k == 1。

正如我们所见,随着维度的增加,数组的复杂性呈指数级增长。

多维数组的局限性如下

  • 无法从数组中删除或移除任何元素。
  • 如果指定了较大的数组大小,但我们事先不知道需要将多少元素存储在内存中,则会造成内存浪费。

多维数组的优点

  • 好处包括能够使用单个名称表示同一类型的多个数据项。

  • 它可用于创建其他数据结构,如链表、堆栈、队列、树、图等。

  • 矩阵使用多维数组表示。

多维数组的缺点

  • 我们必须提前知道将要在数组中存储多少个元素。
  • 数组是静态结构。它表示数组的大小是固定的。 
  • 分配给数组的内存无法增加或减少。
  • 由于数组的大小是固定的,如果我们分配的内存多于所需,则会浪费内存空间。如果我们分配的内存少于所需,我们将遇到问题。
  •  数组元素存储在连续的内存位置中。
  • 因此,插入和删除非常困难且耗时。