C++

C++ 知识量:19 - 82 - 316

3.6 多维数组><

多维数组简介- 3.6.1 -

C++中的多维数组是一种特殊的数组,它可以包含多个数组,每个数组可以包含多个元素。多维数组通常用于表示表格或矩阵等数据结构。

在C++中,多维数组的定义和初始化方式与一维数组类似,但需要在方括号中指定多个下标。例如,下面是一个包含3行4列的二维数组的例子:

int array2D[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };

这个二维数组包含3个一维数组,每个一维数组都有4个整型元素。可以使用两个下标运算符访问数组中的元素,第一个下标运算符表示行数,第二个下标运算符表示列数。例如,要访问第一个元素,可以使用以下代码:

int firstElement = array2D[0][0];

如果要创建一个三维数组,可以继续嵌套一维数组。例如,创建一个2行3列2个一维数组的三维数组:

int array3D[2][3][2] = { { {0, 1}, {2, 3}, {4, 5} }, { {6, 7}, {8, 9}, {10, 11} } };

这个三维数组包含2个二维数组,每个二维数组都有3个一维数组,每个一维数组都有2个整型元素。可以使用三个下标运算符来访问数组中的元素,第一个下标运算符表示最外层数组的行数,第二个下标运算符表示中间层数组的列数,第三个下标运算符表示最内层数组的元素编号。例如,要访问第一个二维数组的第一个元素,可以使用以下代码:

int firstElement3D = array3D[0][0][0];

使用范围 for语句处理多维数组- 3.6.2 -

C++ 中的范围 for 循环(也称为基于范围的 for 循环)可以方便地遍历多维数组。在处理多维数组时,可以使用嵌套的基于范围的 for 循环来遍历每个元素。

下面是一个处理 3x3 的二维数组的例子:

#include <iostream>  
using namespace std;  
  
int main() {  
    int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };  
  
    // 使用嵌套的基于范围的 for 循环遍历二维数组  
    for (auto row : arr) {  
        for (auto elem : row) {  
            cout << elem << " ";  
        }  
        cout << endl;  
    }  
  
    return 0;  
}

这个程序首先定义了一个 3x3 的二维数组 arr,然后使用嵌套的基于范围的 for 循环遍历数组中的每个元素。外层循环遍历每一行,内层循环遍历每一行的元素。在循环体内,使用 cout 输出每个元素的值。

注意:在使用基于范围的 for 循环遍历二维数组时,row 和 elem 是从数组中直接获取的别名,它们分别代表二维数组的行和元素。这些别名是临时的,只在循环体内有效。在循环体外,不能使用这些别名来访问数组的元素。

指针和多维数组的关系- 3.6.3 -

因为多维数组在内存中是以线性数组的形式存储的,而指针可以用来访问这个线性数组中的元素。

对于一个m x n的多维数组,它可以被看作是一个长度为m * n的一维数组。数组中的每个元素都可以通过一个指向该元素的指针来访问。

例如,假设有一个3 x 4的整数数组arr,可以使用一个指向该数组首元素的指针来访问数组中的元素。这个指针可以定义为int *p = &arr[0][0],其中&arr[0][0]表示数组中第一个元素的地址。

通过这个指针,可以使用基于范围的for循环遍历整个数组,如下所示:

for (int *p = &arr[0][0]; p < &arr[3][4]; ++p) {  
    cout << *p << " ";  
}

这个循环会输出整个数组中的元素,因为指针p从数组的第一个元素的地址开始,一直遍历到最后一个元素的地址。

需要注意的是,多维数组在内存中是连续存储的,因此可以使用指针来访问任意位置的元素。但是,由于多维数组的每一行可能包含不同的元素个数,因此不能简单地使用行和列索引来计算元素的地址。需要通过一些计算方法来计算元素的地址。