C++ 多维数组

在本教程中,我们将学习 C++ 中的多维数组。更具体地说,如何在我们的程序中声明、访问和有效地使用它们。

在 C++中,我们可以创建一个数组的数组,称为多维数组。例如:

int x[3][4];

这里, x 是一个二维数组。它最多可以容纳 12 个元素。

我们可以把这个数组想象成一个有 3 行的表,每行有 4 列,如下所示。

C++ 二维数组
C++ 二维数组

三维数组也以类似的方式工作。例如:

float x[2][4][3];

这个数组 x 最多可容纳 24 个元素。

我们可以通过简单地乘以数组的维度来找出数组中元素的总数: 2 * 4 * 3 = 24

多维数组初始化

与普通数组一样,我们可以通过多种方式初始化多维数组。

二维数组的初始化

int test[2][3] = {2, 4, 5, 9, 0, 19};

上述方法不是优选的。下面给出了使用相同数组元素初始化此数组的更好方法:

int test[2][3] = { {2, 4, 5}, {9, 0, 19}};

这个数组有 2 行 3 列,这就是为什么我们有两行元素,每行 3 个元素。

C++二维数组初始化
C++二维数组初始化

三维数组的初始化

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} }
};

注意这个三维数组的维度。

第一个维度的值为 2 。因此,构成第一维的两个元素是:

  • 元素 1 = { {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} }
  • 元素 2 = { {13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9} }

第二个维度的值为 3 。请注意,第一个维度的每个元素都有三个元素:

  • 元素 1 中有 3 个子元素 {3, 4, 2, 3}, {0, -3, 9, 11}{23, 12, 23, 2}
  • 元素 2 中有 3 个子元素 {13, 4, 56, 3}, {5, 9, 3, 5}{5, 1, 4, 9}

最后,第二维的每个元素内部都有四个 int 类型的数字:

  • 3, 4, 2, 3
  • 0, -3, 9, 11
  • 23, 12, 23, 2
  • 13, 4, 56, 3
  • 5, 9, 3, 5
  • 5, 1, 4, 9

示例 1:二维数组

本示例展示了遍历输出 C++ 中二维数组中的所有元素的方法。

#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

在上面的例子中,我们初始化了一个名为 testint 二维数组,它有 3 个“行”和 2 个“列”。

在这里,我们使用了嵌套 for 循环来显示数组元素。

  • 外部循环从 i == 0i == 2 用于访问数组的行
  • 内部循环从 j == 0j == 1 用于访问数组的列

最后,我们在每次迭代中打印数组元素。

示例 2:获取二维数组的输入

本示例展示了在 C++ 中如何获取用户的输入并保存到二维数组中。

#include <iostream>
using namespace std;

int main() {
    int numbers[2][3];

    cout << "Enter 6 numbers: " << endl;

    // Storing user input in the array
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j) {
            cin >> numbers[i][j];
        }
    }

    cout << "The numbers are: " << endl;

    //  Printing array elements
    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

在这里,我们使用了一个嵌套 for 循环来获取二维数组的输入。获取所有输入后,我们使用另一个嵌套 for 循环来打印数组成员。

示例 3:三维数组

本示例展示了遍历输出 C++ 中三维数组中的所有元素的方法。

#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

打印三维数组元素的方法类似于二维数组。

但是,由于我们要操作 3 个维度,因此我们使用嵌套的 for 循环,总共有 3 个循环:

  • 外部循环从 i == 0 to i == 1 访问数组的第一维
  • 中间循环从 j == 0 to j == 2 访问数组的第二维
  • 内部循环从 k == 0 to k == 1 访问数组的第三维

我们可以看到,数组的复杂度随着维度的增加呈指数增长。

结论

多维数组可以简单理解为数组的数组,即多维数组的元素还是数组。