C++ 动态数组

C++ 动态数组

动态数组 类似于常规数组。动态数组可以在程序运行时进行修改,但唯一的区别是,动态数组元素占据了一块连续的内存块。

动态数组的大小一旦开始创建数组就不能更改。因此,动态数组与其他数组在某种程度上是不同的。即使动态数组被填满,其大小也可以扩展。

在创建数组时会分配预定数量的内存。随着动态数组的扩展,其内存大小在需求发生时可能有各种因素,因此这种情况并非适用于动态数组。

影响动态数组性能的各种因素:

数组的性能取决于其增长因子和起始大小。影响性能的因素如下:

  • 如果数组的增长因子和大小都很小,则重新分配内存的次数会更多。这会降低数组的性能。
  • 另一个因素是,如果数组的增长因子和大小都很大,则数组会存在大量未使用的内存块。由于这个因素,调整大小操作可能需要更长的时间,从而降低数组的性能。

new关键字

C++中,使用new关键字可以为动态数组分配内存。需要指定要分配的项目数,在一对方括号中指定。此关键字之前应该是类型名。将分配请求的项目数。

语法:

new关键字的语法如下:

Pointer_var = new data_type;

语法描述:

pointer_var 是指针变量的名称。

根据上述语法,写入的数据类型应为有效的C++数据类型。

其后,关键字将返回一个指针的第一个项目。然后在创建动态数组后,可以使用delete关键字从语句中删除它。

动态数组分配的一些示例:

示例

#include
using namespace std;
int main() {
int p, q;
cout << "enter the number of items that you want to store:" << "\n";
cin >>q;
int *arr = new int(q);
cout << "enter the " << q << " items that you want to store:" << endl;
for (p = 0; p < q; p++) {
cin >> arr[p];
}
cout << "you entered the following things: ";
for (p = 0; p < q; p++) {
cout << arr[p] << " ";
}
return 0;
}

输出:

Enter the number of items that you want to store:
2
Enter the 2 items that you want to store:
10 11
You entered the following things: 10 11

上述示例代码的解释:

  1. 首先,在我们的程序中,我们将包含头文件以使用其函数。
  2. 然后,在我们的程序中,我们将包含std命名空间,而不调用它以使用其类。
  3. 之后,我们将调用main函数。在函数体内,应该添加程序的逻辑。
  4. 然后我们声明了两个整数类型的变量,如p和q。
  5. 然后,为了输入变量q的值,我们必须提示用户在控制台上打印一些文本。
  6. 之后,用户从键盘输入的值将被读取,并将此值分配给变量q。
  7. 为了保留q的整数总数并将其赋值给指针变量*arr,您必须为其声明一个数组。
  8. 为了输入队列项的数量,我们必须为用户打印一条消息。
  9. 然后,将为变量P创建一个循环来迭代用户输入的项。
  10. 用户输入的元素将被读取并存储在名为arr的数组中。
  11. 然后将结束循环的主体。
  12. 之后,在控制台上将打印一些文本。
  13. 之后,我们将使用for循环创建一个循环变量P来迭代数组的项。
  14. 然后,将在控制台上打印数组arr中包含的值。
  15. 然后结束for循环的主体。
  16. 成功完成程序后,应该返回值。
  17. 最后,将结束主函数的主体。

在上面的示例中,用户可以在运行时指定数组的任何所需大小。因此,我们可以理解数组的大小可以在分配时确定。

动态分配数组的初始化

将数组初始化为0是一个简单的过程。

分配的语法如下:

Int *array{ new int[length]{} };

以上语法的描述

以上语法显示了要添加到数组中的长度的元素数量。

该位置应该为空,因为数组将初始化为 0 。通过初始化器列表,我们可以初始化一个动态数组。现在,我们将创建一个示例来演示这个数组。

示例

#include 
Using namespace std;
Int main(void) {
Int p;
Int *array{ new int[5]{ 9, 6, 12, 2, 13 } };
Cout << "entered Array elements are: "<< endl;
For (p = 0; p < 5; p++) {
Cout << array[p] << endl;
}
Return 0;
}

输出:

Entered Array elements are:
9
6
12
2
13

以上代码的说明:

  1. 首先,在程序中,我们会包含 iostream头文件 以使用它的函数。
  2. 然后,在程序中,我们会包含 std命名空间 而不是调用它,以便使用它的类。
  3. 之后,我们将调用 main函数 在函数体中,应该添加程序的逻辑。
  4. 然后我们声明一个变量,例如 p 的整数类型。
  5. 借助初始化列表,我们将声明一个名为array的数组。 可以容纳5个整数 在数组长度和初始化列表之间的重要点是没有使用 =运算符
  6. 将输出一些文本。在C++中,endl关键字表示一行的结束。光标在该关键字后移至下一句。
    将使用for循环 迭代 数组元素。
    将在控制台上打印数组array的内容。
    for循环的主体在此结束。
    所以,完成程序后,应返回其值。
    最后,这里会结束main函数。

数组的重新分配大小

在分配期间,设置动态数组的长度。一旦已分配,C++中没有内置函数可以重新调整数组的大小。

通过分配新数组并复制元素来擦除旧数组,我们可以解决这个问题。在此过程中,可能会发生许多错误,因此我们必须注意。

动态删除数组

一旦计算机内存中的数组的目的完成,就应删除动态数组。为此,可以使用delete语句来完成。删除数组后释放的内存空间可以用来存储另一组数据。但是,一旦程序终止,即使不使用数组,动态分配的数组也可以自动删除,从计算机内存中。

一些重要的点

我们必须使用 delete[] 而不是delete来从计算机内存中删除动态数组。而不是删除一个变量来删除多个 变量[] 指示CPU完成。但是,在处理动态数组时,如果我们使用delete来替代 delete[] 可能会导致问题。

数据损坏,内存泄漏,崩溃等都是这个问题的示例。

示例:

#include
using namespace std;
int main() {
int p, q;
cout << "amount of number that you will type" << "\n";
cin >>q;
int *arr = new int(q);
cout << "type these " << q << " required numbers" << endl;
for (p = 0; p < q; p++) {
cin >> arr[p];
}
cout << "the typed number as follows: ";
for (p = 0; p < q; p++) {
cout << arr[p] << " ";
}
cout << endl;
delete [] arr;
return 0;
}

输出:

Amount of numbers that you will type
3
Type these 3 required numbers
1 2 3
The typed number as follows: 1 2 3

上面示例代码的解释:

  1. 首先,在我们的程序中,我们将包含 iostream头文件 以便使用它的函数。
  2. 然后,在我们的程序中,我们将包含 std命名空间 而不调用它以便使用它的类。
  3. 接下来,我们将调用 main函数 。在函数体内,应添加程序的逻辑。
  4. 然后,我们声明两个整数类型的变量, p 和 q
  5. 然后,为了输入 变量 q 的值,我们必须提示用户在控制台上打印一些文本。
  6. 然后,用户从键盘输入的内容将被接受,并将此值分配给 变量 q
  7. 要保持 q个整数 的总数,并将其分配给指针变量 *arr ,必须声明一个数组。
  8. 要输入q个项目,我们必须为用户打印一条消息。
  9. 然后,将创建一个 for循环 ,以便遍历用户输入的项目。
  10. 用户输入的元素将被读取,并存储在数组arr中。
  11. 然后,将结束 for循环 体。
  12. 接下来,在控制台上会打印一些文本。
  13. 然后,我们将使用 for循环 来创建一个循环变量P,以便遍历数组的项目。
  14. 然后,将打印数组arr中包含的值。
  15. 然后,将结束 for循环 的主体。
  16. 接下来,会在控制台上打印一个空行。
  17. 将释放数组 arr 的内存。
  18. 当程序成功完成时,程序将返回该值。
  19. 最后,将结束main函数。

总结

在上面的上下文中,我们将这些要点总结如下:

  • 有一个 固定大小常规大小的数组 。一旦声明了常规大小的数组,就不能更改其大小。
  • 在编译时期,这些类型的数组会确定内存的大小。
  • 但是除此之外,动态数组的类型完全不同。在运行时,可以更改该数组的大小。
  • 在C++中,使用 new 关键字 可以声明 动态数组
  • 为了指定项的数量,我们使用方括号来存储在动态数组中。
  • 在完成后,我们可以借助 delete 运算符释放内存。
  • 对于所有数组元素,我们使用 delete 运算符以及 [] 释放内存。
  • 对于C++数组的调整大小,没有内置的数组机制。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程