發(fā)布于:2021-01-21 16:47:23
0
215
0
什么是動態(tài)數(shù)組?
動態(tài)數(shù)組與常規(guī)數(shù)組非常相似,但其大小在程序運行時是可以修改的。數(shù)組元素占用連續(xù)的內(nèi)存塊。
一旦創(chuàng)建了數(shù)組,就不能更改其大小。但是,動態(tài)數(shù)組是不同的。動態(tài)數(shù)組可以在填充之后擴展其大小。
在創(chuàng)建數(shù)組的過程中,它被分配了預定數(shù)量的內(nèi)存。動態(tài)數(shù)組的情況并非如此,因為當需要時,它會將其內(nèi)存大小增加一定的因子。
在這個C++教程中,你將學習什么是動態(tài)數(shù)組?影響動態(tài)數(shù)組性能的因素。
影響動態(tài)陣列性能的因素
數(shù)組的初始大小及其增長因子決定了它的性能。注意以下幾點:
如果一個數(shù)組的大小和增長因子都很小,它會更頻繁地重新分配內(nèi)存。這將降低陣列的性能。
如果一個數(shù)組的大小和增長因子都很大,那么它將有大量未使用的內(nèi)存。因此,調(diào)整大小操作可能需要更長的時間。這將降低陣列的性能。
新關鍵字
在C++中,我們可以使用新關鍵字創(chuàng)建動態(tài)數(shù)組。要分配的項目數(shù)在一對方括號內(nèi)指定。類型名稱應在其前面。將分配請求的項目數(shù)。
new關鍵字采用以下語法:
pointer_variable = new data_type;
指針變量是指針變量的名稱。
數(shù)據(jù)類型必須是一個有效的C++數(shù)據(jù)類型。
關鍵字然后返回指向第一項的指針。創(chuàng)建動態(tài)數(shù)組后,我們可以使用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名稱空間,以便在不調(diào)用它的情況下使用它的類。
調(diào)用main()函數(shù)。程序邏輯應該添加到函數(shù)體中。
聲明兩個整數(shù)變量x和n。
在控制臺上打印一些文本,提示用戶輸入變量n的值。
從鍵盤讀取用戶輸入并將其分配給變量n。
聲明一個數(shù)組,以容納總共n個整數(shù),并將其分配給指針變量*arr。
打印一條消息,提示用戶輸入n個項目。
使用for循環(huán)創(chuàng)建循環(huán)變量x,以迭代用戶輸入的項。
讀取用戶輸入的元素并將它們存儲在for循環(huán)主體的數(shù)組arr中。
在控制臺上打印一些文本。
使用for循環(huán)創(chuàng)建循環(huán)變量x來迭代數(shù)組的項。
在控制臺上打印名為arr的數(shù)組中包含的值。
for循環(huán)主體的結(jié)尾。
程序成功完成后必須返回值。
main()函數(shù)主體的結(jié)尾。
注意:在上面的示例中,允許用戶在運行時為數(shù)組指定任何大小。這意味著數(shù)組的大小是在運行時確定的。
初始化動態(tài)分配的陣列
將動態(tài)數(shù)組初始化為0很容易。
語法:
int *array{ new int[length]{} };
在上述語法中,長度表示要添加到數(shù)組中的元素數(shù)。因為我們需要將數(shù)組初始化為0,所以應該將其留空。
我們可以使用初始值設定項列表初始化動態(tài)數(shù)組。讓我們創(chuàng)建一個示例來演示這一點。
#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名稱空間,以便在不調(diào)用它的情況下使用它的類。
調(diào)用main()函數(shù)。程序邏輯應該添加到函數(shù)體中。
聲明名為x的整數(shù)變量。
使用初始值設定項列表聲明名為array的動態(tài)數(shù)組。數(shù)組將包含5個整數(shù)元素。請注意,我們沒有在數(shù)組長度和初始值設定項列表之間使用“=”運算符。
在控制臺上打印一些文本。Endl是C++的關鍵字,意思是結(jié)束行。它將光標移到下一個句子。
使用for循環(huán)迭代數(shù)組元素。
在控制臺上打印名為array的數(shù)組的內(nèi)容。
for循環(huán)主體的結(jié)尾。
程序成功完成后必須返回值。
main()函數(shù)主體的結(jié)尾。
調(diào)整數(shù)組大小
動態(tài)數(shù)組的長度是在分配時間內(nèi)設置的。
但是,C++在分配后沒有一個內(nèi)置的調(diào)整數(shù)組大小的機制。
但是,您可以通過動態(tài)分配新數(shù)組、在元素上復制,然后刪除舊數(shù)組來克服此挑戰(zhàn)。
注意:這種技術很容易出錯,因此請盡量避免。
動態(tài)刪除數(shù)組
一個動態(tài)數(shù)組一旦達到目的就應該從計算機內(nèi)存中刪除。delete語句可以幫助您實現(xiàn)這一點。釋放的內(nèi)存空間可以用來保存另一組數(shù)據(jù)。但是,即使您不從計算機內(nèi)存中刪除動態(tài)數(shù)組,一旦程序終止,它也會自動刪除。
注意:要從計算機內(nèi)存中刪除動態(tài)數(shù)組,應使用delete[],而不是delete。[]指示CPU刪除多個變量而不是一個變量。在處理動態(tài)數(shù)組時使用delete而不是delete[]可能會導致問題。這類問題的例子包括內(nèi)存泄漏、數(shù)據(jù)損壞、崩潰等。
#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名稱空間,以便在不調(diào)用它的情況下使用它的類。
調(diào)用main()函數(shù)。程序邏輯應該添加到函數(shù)體中。
聲明整數(shù)數(shù)據(jù)類型的兩個變量x和n。
在控制臺上打印一些文本。文本將要求用戶說明他們將輸入的數(shù)字數(shù)。
從鍵盤讀取用戶輸入。輸入值將分配給變量n。
聲明一個指針變量*arr。數(shù)組arr將保留一些內(nèi)存來存儲總共n個整數(shù)。
在控制臺上打印一條消息,提示用戶輸入n個數(shù)字。
創(chuàng)建for循環(huán)和循環(huán)變量x,以迭代用戶輸入的數(shù)字。
讀取用戶輸入的數(shù)字并將其存儲在for循環(huán)主體的數(shù)組arr中。
在控制臺上打印一些文本。
使用for循環(huán)和循環(huán)變量x迭代數(shù)組arr的內(nèi)容。
在控制臺上打印數(shù)組arr的值。
for循環(huán)主體的結(jié)尾。
在控制臺上打印空行。
釋放數(shù)組arr的內(nèi)存。
程序成功完成后將返回值。
main()函數(shù)主體的結(jié)尾。
總結(jié):
常規(guī)數(shù)組的大小是固定的。一旦聲明,就不能修改它們的大小。
對于這些類型的數(shù)組,內(nèi)存大小在編譯時確定。
動態(tài)數(shù)組是不同的。它們的大小可以在運行時更改。
在動態(tài)數(shù)組中,大小在運行時確定。 > LI> C++中的動態(tài)數(shù)組是用new關鍵字聲明的。
我們使用方括號指定要存儲在動態(tài)數(shù)組中的項數(shù)。
處理完數(shù)組后,我們可以使用delete操作符釋放內(nèi)存。
使用帶[]的delete運算符釋放所有數(shù)組元素的內(nèi)存。
不帶[]的刪除只釋放單個元素的內(nèi)存。 > LI>沒有內(nèi)置的機制來調(diào)整C++數(shù)組的大小。
要使用列表初始值設定項初始化數(shù)組,我們不使用“=”運算符。