发布于:2021-01-21 16:47:23
0
178
0
什么是动态数组?
动态数组与常规数组非常相似,但其大小在程序运行时是可以修改的。数组元素占用连续的内存块。
一旦创建了数组,就不能更改其大小。但是,动态数组是不同的。动态数组可以在填充之后扩展其大小。
在创建数组的过程中,它被分配了预定数量的内存。动态数组的情况并非如此,因为当需要时,它会将其内存大小增加一定的因子。
在这个C++教程中,你将学习什么是动态数组?影响动态数组性能的因素。
影响动态阵列性能的因素
数组的初始大小及其增长因子决定了它的性能。注意以下几点:
如果一个数组的大小和增长因子都很小,它会更频繁地重新分配内存。这将降低阵列的性能。
如果一个数组的大小和增长因子都很大,那么它将有大量未使用的内存。因此,调整大小操作可能需要更长的时间。这将降低阵列的性能。
新关键字
在C++中,我们可以使用新关键字创建动态数组。要分配的项目数在一对方括号内指定。类型名称应在其前面。将分配请求的项目数。
new关键字采用以下语法:
pointer_variable = new data_type;
指针变量是指针变量的名称。
数据类型必须是一个有效的C++数据类型。
关键字然后返回指向第一项的指针。创建动态数组后,我们可以使用delete关键字将其删除。
#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;
}
输出:
以下是代码截图:
代码说明:
将iostream头文件包含到我们的程序中以使用其功能。
在我们的程序中包含std名称空间,以便在不调用它的情况下使用它的类。
调用main()函数。程序逻辑应该添加到函数体中。
声明两个整数变量x和n。
在控制台上打印一些文本,提示用户输入变量n的值。
从键盘读取用户输入并将其分配给变量n。
声明一个数组,以容纳总共n个整数,并将其分配给指针变量*arr。
打印一条消息,提示用户输入n个项目。
使用for循环创建循环变量x,以迭代用户输入的项。
读取用户输入的元素并将它们存储在for循环主体的数组arr中。
在控制台上打印一些文本。
使用for循环创建循环变量x来迭代数组的项。
在控制台上打印名为arr的数组中包含的值。
for循环主体的结尾。
程序成功完成后必须返回值。
main()函数主体的结尾。
注意:在上面的示例中,允许用户在运行时为数组指定任何大小。这意味着数组的大小是在运行时确定的。
初始化动态分配的阵列
将动态数组初始化为0很容易。
语法:
int *array{ new int[length]{} };
在上述语法中,长度表示要添加到数组中的元素数。因为我们需要将数组初始化为0,所以应该将其留空。
我们可以使用初始值设定项列表初始化动态数组。让我们创建一个示例来演示这一点。
#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;
}
输出:
以下是代码截图:
代码说明:
将iostream头文件包含到我们的程序中以使用其功能。
在我们的程序中包含std名称空间,以便在不调用它的情况下使用它的类。
调用main()函数。程序逻辑应该添加到函数体中。
声明名为x的整数变量。
使用初始值设定项列表声明名为array的动态数组。数组将包含5个整数元素。请注意,我们没有在数组长度和初始值设定项列表之间使用“=”运算符。
在控制台上打印一些文本。Endl是C++的关键字,意思是结束行。它将光标移到下一个句子。
使用for循环迭代数组元素。
在控制台上打印名为array的数组的内容。
for循环主体的结尾。
程序成功完成后必须返回值。
main()函数主体的结尾。
调整数组大小
动态数组的长度是在分配时间内设置的。
但是,C++在分配后没有一个内置的调整数组大小的机制。
但是,您可以通过动态分配新数组、在元素上复制,然后删除旧数组来克服此挑战。
注意:这种技术很容易出错,因此请尽量避免。
动态删除数组
一个动态数组一旦达到目的就应该从计算机内存中删除。delete语句可以帮助您实现这一点。释放的内存空间可以用来保存另一组数据。但是,即使您不从计算机内存中删除动态数组,一旦程序终止,它也会自动删除。
注意:要从计算机内存中删除动态数组,应使用delete[],而不是delete。[]指示CPU删除多个变量而不是一个变量。在处理动态数组时使用delete而不是delete[]可能会导致问题。这类问题的例子包括内存泄漏、数据损坏、崩溃等。
#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头文件以使用其功能。
在我们的程序中包含std名称空间,以便在不调用它的情况下使用它的类。
调用main()函数。程序逻辑应该添加到函数体中。
声明整数数据类型的两个变量x和n。
在控制台上打印一些文本。文本将要求用户说明他们将输入的数字数。
从键盘读取用户输入。输入值将分配给变量n。
声明一个指针变量*arr。数组arr将保留一些内存来存储总共n个整数。
在控制台上打印一条消息,提示用户输入n个数字。
创建for循环和循环变量x,以迭代用户输入的数字。
读取用户输入的数字并将其存储在for循环主体的数组arr中。
在控制台上打印一些文本。
使用for循环和循环变量x迭代数组arr的内容。
在控制台上打印数组arr的值。
for循环主体的结尾。
在控制台上打印空行。
释放数组arr的内存。
程序成功完成后将返回值。
main()函数主体的结尾。
总结:
常规数组的大小是固定的。一旦声明,就不能修改它们的大小。
对于这些类型的数组,内存大小在编译时确定。
动态数组是不同的。它们的大小可以在运行时更改。
在动态数组中,大小在运行时确定。 > LI> C++中的动态数组是用new关键字声明的。
我们使用方括号指定要存储在动态数组中的项数。
处理完数组后,我们可以使用delete操作符释放内存。
使用带[]的delete运算符释放所有数组元素的内存。
不带[]的删除只释放单个元素的内存。 > LI>没有内置的机制来调整C++数组的大小。
要使用列表初始值设定项初始化数组,我们不使用“=”运算符。
作者介绍