问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C++ 动态分配数组的例子

创作时间:
作者:
@小白创作中心

C++ 动态分配数组的例子

引用
1
来源
1.
https://zh.mfgrobots.com/ooip/c/1005010756.html

C++ 动态分配数组的例子

什么是动态数组?

动态数组与常规数组非常相似,但它的大小在程序运行时是可以修改的。 DynamArray 元素占用一块连续的内存。

一旦创建了数组,就不能更改其大小。但是,动态数组是不同的。动态数组即使在被填充后也可以扩展其大小。

在创建数组期间,会为其分配预定数量的内存。动态数组并非如此,因为它会在需要时将其内存大小增加一定的因子。

在本 C++ 教程中,您将学习

  • 什么是动态数组?
  • 影响动态数组性能的因素
  • 新关键字
  • 初始化动态分配的数组
  • 调整数组大小
  • 动态删除数组

影响动态数组性能的因素

阵列的初始大小及其增长因子决定了其性能。注意以下几点:

  1. 如果数组具有较小的大小和较小的增长因子,它将继续更频繁地重新分配内存。这会降低阵列的性能。

  2. 如果数组的大小和增长因子很大,那么它将有大量未使用的内存。因此,调整大小操作可能需要更长的时间。这会降低阵列的性能。

新的关键字

在 C++ 中,我们可以使用 new 关键字创建一个动态数组。要分配的项目数在一对方括号内指定。类型名称应在此之前。将分配请求的项目数。

语法:

new 关键字采用以下语法:

pointer_variable = new data_type;

pointer_variable 是指针变量的名称。

data_type 必须是有效的 C++ 数据类型。

然后关键字返回指向第一项的指针。创建完动态数组后,我们可以使用delete关键字删除它。

示例 1:

#include<iostream>
using namespace std;
int main() {
 int x, n;
 cout << "Enter the number of items:" << "\n";
 cin >>n;
 int *arr = new int(n);
 cout << "Enter " << n << " items" << endl;
 for (x = 0; x < n; x++) {
 cin >> arr[x];
 }
 cout << "You entered: ";
 for (x = 0; x < n; x++) {
 cout << arr[x] << " ";
 }
 return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 将 iostream 头文件包含到我们的程序中以使用其功能。

  2. 在我们的程序中包含 std 命名空间,以便在不调用它的情况下使用它的类。

  3. 调用 main() 函数。程序逻辑应添加到函数体中。

  4. 声明两个整数变量 x 和 n。

  5. 在控制台上打印一些文本,提示用户输入变量 n 的值。

  6. 从键盘读取用户输入并将其分配给变量 n。

  7. 声明一个数组以容纳总共 n 个整数并将其分配给指针变量 *arr。

  8. 打印一条消息,提示用户输入 n 个项目。

  9. 使用 for 循环创建循环变量 x 以遍历用户输入的项目。

  10. 读取用户输入的元素并将其存储在数组 arr 中。

  11. for 循环主体的结尾。

  12. 在控制台上打印一些文本。

  13. 使用 for 循环创建一个循环变量 x 来遍历数组的各项。

  14. 在控制台打印出名为 arr 的数组中包含的值。

  15. for 循环主体的结尾。

  16. 程序必须在成功完成后返回值。

  17. main() 函数主体的结尾。

注意:在上面的示例中,用户可以在运行时为数组指定任意大小。这意味着数组的大小是在运行时确定的.

初始化动态分配的数组

将动态数组初始化为0很容易。

语法:

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

在上面的语法中,长度表示要添加到数组中的元素的数量。由于我们需要将数组初始化为0,所以这里应该留空。

我们可以使用初始化列表来初始化动态数组。让我们创建一个示例来演示这一点。

示例 2:

#include <iostream>
using namespace std;
int main(void) {
 int x; 
 int *array{ new int[5]{ 10, 7, 15, 3, 11 } };
 cout << "Array elements: " << endl;
 for (x = 0; x < 5; x++) {
 cout << array[x] << endl;
 }
 return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 将 iostream 头文件包含到我们的程序中以使用其功能。

  2. 在我们的程序中包含 std 命名空间,以便在不调用它的情况下使用它的类。

  3. 调用 main() 函数。程序逻辑应添加到函数体中。

  4. 声明一个名为 x 的整数变量。

  5. 使用初始化列表声明一个名为 array 的动态数组。该数组将包含 5 个整数元素。请注意,我们没有在数组长度和初始化列表之间使用“=”运算符。

  6. 在控制台上打印一些文本。 endl 是一个 C++ 关键字,表示结束行。它将光标移动到下一个句子。

  7. 使用 for 循环遍历数组元素。

  8. 在控制台打印名为array的数组的内容。

  9. for 循环主体的结尾。

  10. 程序必须在成功完成后返回值。

  11. main() 函数主体的结尾。

调整数组大小

动态数组的长度是在分配期间设置的。

但是,C++ 没有内置的数组分配后调整大小的机制。

但是,您可以通过动态分配新数组、复制元素、然后擦除旧数组来克服这一挑战。

注意:此技术容易出错,因此请尽量避免。

动态删除数组

完成目的后,应从计算机内存中删除动态数组。 delete 语句可以帮助您完成此操作。然后可以使用释放的内存空间来保存另一组数据。但是,即使你不从计算机内存中删除动态数组,它也会在程序终止后自动删除。

注意:

要从计算机内存中删除动态数组,您应该使用 delete[],而不是 delete。 [] 指示 CPU 删除多个变量而不是一个变量。在处理动态数组时使用 delete 而不是 delete[] 可能会导致问题。此类问题的示例包括内存泄漏、数据损坏、崩溃等。

示例 3:

#include<iostream>
using namespace std;
int main() {
 int x, n;
 cout << "How many numbers will you type?" << "\n";
 cin >>n;
 int *arr = new int(n);
 cout << "Enter " << n << " numbers" << endl;
 for (x = 0; x < n; x++) {
 cin >> arr[x];
 }
 cout << "You typed: ";
 for (x = 0; x < n; x++) {
 cout << arr[x] << " ";
 }
 cout << endl;
 delete [] arr;
 return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 在我们的程序中包含 iostream 头文件以便使用它的功能。

  2. 在我们的程序中包含 std 命名空间,以便在不调用它的情况下使用它的类。

  3. 调用 main() 函数。程序逻辑应添加到函数体中。

  4. 声明两个整数数据类型的变量 x 和 n。

  5. 在控制台上打印一些文本。文本将要求用户说明他们将输入的数字数量。

  6. 从键盘读取用户输入。输入值将分配给变量 n。

  7. 声明一个指针变量*arr。数组 arr 将保留一些内存来存储总共 n 个整数。

  8. 在控制台上打印一条消息,提示用户输入 n 个数字。

  9. 创建一个 for 循环和循环变量 x 以遍历用户输入的数字。

  10. 读取用户输入的数字并将它们存储在数组 arr 中。

  11. for 循环主体的结尾。

  12. 在控制台上打印一些文本。

  13. 使用 for 循环和循环变量 x 来遍历数组 arr 的内容。

  14. 在控制台打印出数组 arr 的值。

  15. for 循环主体的结尾。

  16. 在控制台上打印一个空行。

  17. 释放数组 arr 的内存。

  18. 程序成功完成后会返回值。

  19. main() 函数主体的结尾。

总结:

  • 正则数组具有固定大小。一旦声明,您就无法修改它们的大小。

  • 对于这些类型的数组,内存大小是在编译时确定的。

  • 动态数组是不同的。它们的大小可以在运行时更改。

  • 在动态数组中,大小在运行时确定。

  • C++ 中的动态数组使用 new 关键字声明。

  • 我们使用方括号来指定要存储在动态数组中的项目数。

  • 完成数组后,我们可以使用删除操作符释放内存。

  • 使用带有 [] 的删除运算符来释放所有数组元素的内存。

  • 不带 [] 的删除只会释放单个元素的内存。

  • 没有调整 C++ 数组大小的内置机制。

  • 要使用列表初始化程序初始化数组,我们不使用“=”运算符。

C++ 异常处理:Try、Catch、throw 示例带有示例的 C++ 指针

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号