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

发布于:2021-01-21 16:47:23

0

178

0

C++ 动态数组 分配

什么是动态数组?

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

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

在创建数组的过程中,它被分配了预定数量的内存。动态数组的情况并非如此,因为当需要时,它会将其内存大小增加一定的因子。

在这个C++教程中,你将学习什么是动态数组?影响动态数组性能的因素。

影响动态阵列性能的因素

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

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

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

新关键字

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

语法:

new关键字采用以下语法:

pointer_variable = new data_type;

指针变量是指针变量的名称。

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

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

例1:

#includeusing 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. 读取用户输入的元素并将它们存储在for循环主体的数组arr中。

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

  12. 使用for循环创建循环变量x来迭代数组的项。

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

  14. for循环主体的结尾。

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

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

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

初始化动态分配的阵列

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

语法:

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

在上述语法中,长度表示要添加到数组中的元素数。因为我们需要将数组初始化为0,所以应该将其留空。

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

例2:

#includeusing 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:

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

输出:

 

以下是代码截图:

 

代码说明:

在我们的程序中包含iostream头文件以使用其功能。

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

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

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

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

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

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

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

  8. 创建for循环和循环变量x,以迭代用户输入的数字。

  9. 读取用户输入的数字并将其存储在for循环主体的数组arr中。

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

  11. 使用for循环和循环变量x迭代数组arr的内容。

  12. 在控制台上打印数组arr的值。

  13. for循环主体的结尾。

  14. 在控制台上打印空行。

  15. 释放数组arr的内存。

  16. 程序成功完成后将返回值。

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

总结:

  1. 常规数组的大小是固定的。一旦声明,就不能修改它们的大小。

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

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

  4. 在动态数组中,大小在运行时确定。 > LI> C++中的动态数组是用new关键字声明的。

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

  6. 处理完数组后,我们可以使用delete操作符释放内存。

  7. 使用带[]的delete运算符释放所有数组元素的内存。

  8. 不带[]的删除只释放单个元素的内存。 > LI>没有内置的机制来调整C++数组的大小。

  9. 要使用列表初始值设定项初始化数组,我们不使用“=”运算符。