C++ 数组

2025年4月25日 | 阅读 12 分钟

在 C++ 中,`std::array` 是一个封装固定大小数组的容器。在 C++ 中,数组索引从 0 开始。C++ 数组只能存储固定数量的元素。

在 C++ 或任何其他编程语言中,一组存储在相邻内存位置的相关数据项被称为数组。数组的元素可以通过其索引进行任意访问。它们可用于存储任何类型的原始 数据类型 的集合,包括 int、float、double、char 等。C++ 中的数组还可以存储结构、指针和其他数据类型的派生数据类型,这是一个额外的功能。下面提供了数组在图中的表示。

Java C array 1

示例

编译并运行

输出

First element: 2
Second element: 5

在这里,我们将讨论数组的声明、初始化、访问以及更多内容。

数组声明

在 C++ 中,数组的构建首先定义 数据类型,然后是数组的名称和大小,这两者都用方括号 `[]` 括起来。这种语法通常被称为数组下标运算符。

语法

它具有以下语法。

此声明创建了一个名为 `array_name` 的数组,它根据指定的大小可以容纳固定数量的元素。数组 `char`、`float` 或 `int` 的数据类型决定了它可以保存的值的类型。一旦声明,数组的大小就不能动态更改;它是固定的。

例如:`int arr[4];`

  • int: 要存储的元素类型。
  • arr: 数组名称。
  • 4: 表示数组大小为 4。

创建一个名为“**arr**”的数组,它可以存储五个整数。但是,当声明数组时,数组元素没有预定义值。除非直接初始化,否则它们包含垃圾值。

初始化 C++ 中的数组

在声明数组后,除非为其元素分配了值,否则无法使用它。

数组可以通过两种典型方式进行初始化

  • 声明时初始化数组
  • 声明后赋值

1. 声明时初始化数组

可以在声明时将值放在花括号 `{}` 中来初始化数组。值之间用逗号分隔。

示例

2. 声明后赋值

也可以先声明数组,然后单独为每个索引赋值来初始化数组。

示例

访问 C++ 中的数组元素

索引是访问数组中元素的过程,通过在数组名称后面跟上用方括号 `[]` 括起来的索引号。它允许直接检索或修改特定的数组元素。第一个元素是 0,然后是 1,依此类推。例如,表达式 `name_of_the_array[index]` 引用指定索引点的元素。

在人类计数中位于 n 位置的元素,在编程中实际上位于 n-1 位置,因为索引使用从零开始的编号。当访问超出数组有效范围的索引时,可能会导致数据检索不准确或程序崩溃,这会导致未定义行为。为了避免运行时错误,使用数组需要进行适当的边界检查。

Java C array 1

语法

它具有以下语法。

示例

让我们举一个例子来说明如何在 C++ 中访问数组元素。

示例

编译并运行

输出

Starting element at the index 0: 10
Middle element at the index 2: 30
Last element at the index 4: 50
Complete array elements: 10 20 30 40 50 

说明

C++ 程序在声明时使用 `{10, 20, 30, 40, 50}` 这五个元素初始化了整数数组 `num_bers`。使用相应的索引检索并显示第一个元素 (`num_bers[0]`)、中间元素 (`num_bers[2]`) 和最后一个元素 (`num_bers[4]`)。

`for` 循环遍历数组,依次打印每个条目。`cout` 语句确保输出格式清晰,便于识别每个元素的位置。程序最终成功结束并返回 0,表示正常执行。

C++ 带有空元素的数组

在 C++ 中,当数组声明为固定大小 n 时,它可以包含最多 n 个元素。但是,如果显式初始化的元素少于 n 个,则其余未初始化元素的行为取决于数组的存储类型。让我们看下面的例子。

例如

在这种情况下,尽管数组 `arr` 的容量为 5,但只有三个元素 3、6 和 9 被显式赋值。在这种情况下,如果数组是局部变量(自动存储),未初始化的数组元素将包含分配时内存中的垃圾值。

示例

让我们举一个例子来说明带有空元素的 C++ 数组。

示例

编译并运行

输出

Uninitialized array elements:
arr[0]: -201085088
arr[1]: 32765
arr[2]: -1660869745
arr[3]: 29498

在 C++ 中从用户那里获取输入并将其存储在数组中

由于数组是存储在连续内存位置的相同数据类型的元素集合,因此可以使用其索引检索数组的每个元素。在 C++ 中,在数组首先以固定大小形成后,通常使用循环从用户那里获取值。它允许数组存储用户输入的数组。

示例

让我们举一个 C++ 示例,说明如何从用户那里获取输入并将其存储在数组中。

示例

编译并运行

输出

Enter 5 values: 
Provide input for position 1: 36
Provide input for position 2: 48
Provide input for position 3: 24
Provide input for position 4: 17
Provide input for position 5: 55
Stored elements in the array are:
Element at index 0: 36
Element at index 1: 48
Element at index 2: 24
Element at index 3: 17
Element at index 4: 55

说明

在此示例中,程序要求用户将五个值输入到具有预定大小 DATA_LIMIT (5) 的整数数组 `recordList` 中。之后,使用 `for` 循环将数据存储在数组中。

然后,在再次遍历数组后,显示存储的值及其对应的索引。该程序有效地演示了 C++ 中数组的存储、检索和用户输入处理。

使用 sizeof() 运算符查找 C++ 中数组的大小

在 C++ 中,我们可以使用 `sizeof` 运算符来查找数组的大小。此运算符以字节为单位返回对象使用的总内存量。

在 C++ 中查找数组大小的步骤

  • 使用 `sizeof(arrayName)` 函数确定整个数组占用的总内存大小(以字节为单位)。
  • 查找单个元素的大小: 使用 `sizeof(arrayName[0])` 函数查看数组中单个元素包含多少内存。由于所有元素都是相同类型,因此它们的大小都相同。
  • 确定元素总数: 单个元素的大小除以内存的总大小
  • `sizeof()` 运算符不能与动态分配的数组或指针一起使用。它仅适用于静态声明的数组。

示例

让我们举一个 C++ 示例,说明如何在 C++ 中使用 `sizeof()` 运算符查找数组的大小。

示例

编译并运行

输出

Total memory occupied by an array: 20 bytes
The size of single element: 4 bytes
The total number of elements in the array: 5

说明

在此示例中,使用 `sizeof()` 运算符来确定数组使用的内存总量和元素数量。首先,使用 `sizeof(arr[0])` 运算符获取单个元素的内存大小,并使用 `sizeof(arr)` 来确定数组使用的总内存。

它通过将总大小除以一个元素的大小来精确计算数组长度。最后,它通过显示数组长度、每个元素使用的内存以及总内存利用率,确保了一种有效的数组大小分析方法。

C++ 数组类型

C++ 编程中主要有两种类型的数组

  1. 一维数组
  2. 多维数组

C++ 一维数组

一维数组是在连续内存块中存储的相同数据类型元素的集合。它是最简单的数组类型之一,易于声明和实现。

语法

它具有以下语法:

让我们举一个例子来说明 C++ 中的一维数组。

示例

编译并运行

输出

Element at index 2: 25
Change element at index 1: 50
Sum of all elements: 122

C++ 数组示例:使用 foreach 循环遍历

在 C++ 中,我们也可以使用 foreach 循环遍历数组元素。它一次返回一个数组元素。

示例

编译并运行

输出

10
20
30
40
50

C++ 中的多维数组

多维数组是一种包含一个以上数组作为其元素的数组。它是一组项,其中每个元素都使用多个索引进行访问。

多维数组是一种包含一个以上数组作为其元素的数组。它是一组项,其中每个元素都使用多个索引进行访问。

语法

它具有以下语法:

这里,`a1`、`a2` 和 `an` 定义了每个数组的大小。

让我们举一个例子来说明 C++ 中的多维数组。

示例

编译并运行

输出

Matrix elements are:
4 3 2 
6 1 5 
9 7 8

如何显示数组元素的总和和平均值?

在这里,我们以 C++ 中的一个示例来查找数组元素的总和和平均值。

示例

编译并运行

输出

The numbers are: 7 5 6 12 35 27
Their Sum = 92
Their Average = 15.3333

如何显示数组元素?

在这里,我们以 C++ 中的一个示例来显示数组元素。

示例

编译并运行

输出

The numbers are: 7 5 6 12 35
The numbers are: 7 5 6 12 35

C++ 数组的优点

C++ 数组的几个优点如下

1. 代码优化

数组使我们能够将多个值存储在单个变量中,从而减少了对多个独立变量的需求。

2. 随机访问

可以通过索引访问数组元素,这使得元素检索非常快速。

3. 易于遍历数据

在 C++ 中,可以使用循环非常有效地遍历数组。

4. 易于操作数据

在 C++ 数组中,可以轻松地更新、插入或删除元素。

5. 易于排序数据

可以通过几种内置函数(如 `std::sort`、`qsort` 等)轻松地对数组进行排序。

C++ 数组的缺点

C++ 数组的几个缺点如下

1. 固定大小

数组大小是固定的,这意味着一旦确定了大小,就无法对其进行修改。

2. 内存浪费

如果数组的大小很大但未完全利用,则会浪费内存。

3. 缺乏灵活性

数组大小是静态的,无法动态调整大小。当声明数组大小时,其大小在程序的整个生命周期内保持不变。


C++ 数组选择题

1. 在 C++ 中应如何声明一个大小为 5 的整数数组?

  1. int arr[5];
  2. array<int, 5> arr;
  3. int arr = {5};
  4. int arr(5);
 

答案:a) int arr[5];


2. 如果数组被指定为 `int arr[10]`,那么其最后一个元素的索引是多少?

  1. 9
  2. 10
  3. 11
  4. 未定义
 

答案:a) 9


3. C++ 数组的元素是如何存储在内存中的?

  1. 连续地
  2. 随机地
  3. 以链表格式
  4. 在单独的内存块中
 

答案:a) 连续地


4. 如果我们访问数组元素超出其边界,会发生什么?

  1. 编译时错误
  2. 自动调整大小
  3. 未定义行为
  4. 返回零
 

答案:c) 未定义行为


5. 哪个循环最常用于遍历 C++ 数组?

  1. while 循环
  2. do-while 循环
  3. for 循环
  4. switch 语句
 

答案:c) for 循环