中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

C++動(dòng)態(tài)數(shù)組的實(shí)例分配

發(fā)布于:2021-01-21 16:47:23

0

217

0

C++ 動(dòng)態(tài)數(shù)組 分配

什么是動(dòng)態(tài)數(shù)組?

動(dòng)態(tài)數(shù)組與常規(guī)數(shù)組非常相似,但其大小在程序運(yùn)行時(shí)是可以修改的。數(shù)組元素占用連續(xù)的內(nèi)存塊。

一旦創(chuàng)建了數(shù)組,就不能更改其大小。但是,動(dòng)態(tài)數(shù)組是不同的。動(dòng)態(tài)數(shù)組可以在填充之后擴(kuò)展其大小。

在創(chuàng)建數(shù)組的過(guò)程中,它被分配了預(yù)定數(shù)量的內(nèi)存。動(dòng)態(tài)數(shù)組的情況并非如此,因?yàn)楫?dāng)需要時(shí),它會(huì)將其內(nèi)存大小增加一定的因子。

在這個(gè)C++教程中,你將學(xué)習(xí)什么是動(dòng)態(tài)數(shù)組?影響動(dòng)態(tài)數(shù)組性能的因素。

影響動(dòng)態(tài)陣列性能的因素

數(shù)組的初始大小及其增長(zhǎng)因子決定了它的性能。注意以下幾點(diǎn):

  1. 如果一個(gè)數(shù)組的大小和增長(zhǎng)因子都很小,它會(huì)更頻繁地重新分配內(nèi)存。這將降低陣列的性能。

  2. 如果一個(gè)數(shù)組的大小和增長(zhǎng)因子都很大,那么它將有大量未使用的內(nèi)存。因此,調(diào)整大小操作可能需要更長(zhǎng)的時(shí)間。這將降低陣列的性能。

新關(guān)鍵字

在C++中,我們可以使用新關(guān)鍵字創(chuàng)建動(dòng)態(tài)數(shù)組。要分配的項(xiàng)目數(shù)在一對(duì)方括號(hào)內(nèi)指定。類(lèi)型名稱(chēng)應(yīng)在其前面。將分配請(qǐng)求的項(xiàng)目數(shù)。

語(yǔ)法:

new關(guān)鍵字采用以下語(yǔ)法:

pointer_variable = new data_type;

指針變量是指針變量的名稱(chēng)。

數(shù)據(jù)類(lèi)型必須是一個(gè)有效的C++數(shù)據(jù)類(lèi)型。

關(guān)鍵字然后返回指向第一項(xiàng)的指針。創(chuàng)建動(dòng)態(tài)數(shù)組后,我們可以使用delete關(guān)鍵字將其刪除。

例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;
}

輸出:

 

以下是代碼截圖:

 

代碼說(shuō)明:

  1. 將iostream頭文件包含到我們的程序中以使用其功能。

  2. 在我們的程序中包含std名稱(chēng)空間,以便在不調(diào)用它的情況下使用它的類(lèi)。

  3. 調(diào)用main()函數(shù)。程序邏輯應(yīng)該添加到函數(shù)體中。

  4. 聲明兩個(gè)整數(shù)變量x和n。

  5. 在控制臺(tái)上打印一些文本,提示用戶(hù)輸入變量n的值。

  6. 從鍵盤(pán)讀取用戶(hù)輸入并將其分配給變量n。

  7. 聲明一個(gè)數(shù)組,以容納總共n個(gè)整數(shù),并將其分配給指針變量*arr。

  8. 打印一條消息,提示用戶(hù)輸入n個(gè)項(xiàng)目。

  9. 使用for循環(huán)創(chuàng)建循環(huán)變量x,以迭代用戶(hù)輸入的項(xiàng)。

  10. 讀取用戶(hù)輸入的元素并將它們存儲(chǔ)在for循環(huán)主體的數(shù)組arr中。

  11. 在控制臺(tái)上打印一些文本。

  12. 使用for循環(huán)創(chuàng)建循環(huán)變量x來(lái)迭代數(shù)組的項(xiàng)。

  13. 在控制臺(tái)上打印名為arr的數(shù)組中包含的值。

  14. for循環(huán)主體的結(jié)尾。

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

  16. main()函數(shù)主體的結(jié)尾。

注意:在上面的示例中,允許用戶(hù)在運(yùn)行時(shí)為數(shù)組指定任何大小。這意味著數(shù)組的大小是在運(yùn)行時(shí)確定的。

初始化動(dòng)態(tài)分配的陣列

將動(dòng)態(tài)數(shù)組初始化為0很容易。

語(yǔ)法:

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

在上述語(yǔ)法中,長(zhǎng)度表示要添加到數(shù)組中的元素?cái)?shù)。因?yàn)槲覀冃枰獙?shù)組初始化為0,所以應(yīng)該將其留空。

我們可以使用初始值設(shè)定項(xiàng)列表初始化動(dòng)態(tài)數(shù)組。讓我們創(chuàng)建一個(gè)示例來(lái)演示這一點(diǎn)。

例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;
}

輸出:

   

以下是代碼截圖:

 

代碼說(shuō)明:

  1. 將iostream頭文件包含到我們的程序中以使用其功能。

  2. 在我們的程序中包含std名稱(chēng)空間,以便在不調(diào)用它的情況下使用它的類(lèi)。

  3. 調(diào)用main()函數(shù)。程序邏輯應(yīng)該添加到函數(shù)體中。

  4. 聲明名為x的整數(shù)變量。

  5. 使用初始值設(shè)定項(xiàng)列表聲明名為array的動(dòng)態(tài)數(shù)組。數(shù)組將包含5個(gè)整數(shù)元素。請(qǐng)注意,我們沒(méi)有在數(shù)組長(zhǎng)度和初始值設(shè)定項(xiàng)列表之間使用“=”運(yùn)算符。

  6. 在控制臺(tái)上打印一些文本。Endl是C++的關(guān)鍵字,意思是結(jié)束行。它將光標(biāo)移到下一個(gè)句子。

  7. 使用for循環(huán)迭代數(shù)組元素。

  8. 在控制臺(tái)上打印名為array的數(shù)組的內(nèi)容。

  9. for循環(huán)主體的結(jié)尾。

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

  11. main()函數(shù)主體的結(jié)尾。

調(diào)整數(shù)組大小

動(dòng)態(tài)數(shù)組的長(zhǎng)度是在分配時(shí)間內(nèi)設(shè)置的。

但是,C++在分配后沒(méi)有一個(gè)內(nèi)置的調(diào)整數(shù)組大小的機(jī)制。

但是,您可以通過(guò)動(dòng)態(tài)分配新數(shù)組、在元素上復(fù)制,然后刪除舊數(shù)組來(lái)克服此挑戰(zhàn)。

注意:這種技術(shù)很容易出錯(cuò),因此請(qǐng)盡量避免。

動(dòng)態(tài)刪除數(shù)組

一個(gè)動(dòng)態(tài)數(shù)組一旦達(dá)到目的就應(yīng)該從計(jì)算機(jī)內(nèi)存中刪除。delete語(yǔ)句可以幫助您實(shí)現(xiàn)這一點(diǎn)。釋放的內(nèi)存空間可以用來(lái)保存另一組數(shù)據(jù)。但是,即使您不從計(jì)算機(jī)內(nèi)存中刪除動(dòng)態(tài)數(shù)組,一旦程序終止,它也會(huì)自動(dòng)刪除。

注意:要從計(jì)算機(jī)內(nèi)存中刪除動(dòng)態(tài)數(shù)組,應(yīng)使用delete[],而不是delete。[]指示CPU刪除多個(gè)變量而不是一個(gè)變量。在處理動(dòng)態(tài)數(shù)組時(shí)使用delete而不是delete[]可能會(huì)導(dǎo)致問(wèn)題。這類(lèi)問(wèn)題的例子包括內(nèi)存泄漏、數(shù)據(jù)損壞、崩潰等。

例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;
}

輸出:

 

以下是代碼截圖:

 

代碼說(shuō)明:

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

  1. 在我們的程序中包含std名稱(chēng)空間,以便在不調(diào)用它的情況下使用它的類(lèi)。

  2. 調(diào)用main()函數(shù)。程序邏輯應(yīng)該添加到函數(shù)體中。

  3. 聲明整數(shù)數(shù)據(jù)類(lèi)型的兩個(gè)變量x和n。

  4. 在控制臺(tái)上打印一些文本。文本將要求用戶(hù)說(shuō)明他們將輸入的數(shù)字?jǐn)?shù)。

  5. 從鍵盤(pán)讀取用戶(hù)輸入。輸入值將分配給變量n。

  6. 聲明一個(gè)指針變量*arr。數(shù)組arr將保留一些內(nèi)存來(lái)存儲(chǔ)總共n個(gè)整數(shù)。

  7. 在控制臺(tái)上打印一條消息,提示用戶(hù)輸入n個(gè)數(shù)字。

  8. 創(chuàng)建for循環(huán)和循環(huán)變量x,以迭代用戶(hù)輸入的數(shù)字。

  9. 讀取用戶(hù)輸入的數(shù)字并將其存儲(chǔ)在for循環(huán)主體的數(shù)組arr中。

  10. 在控制臺(tái)上打印一些文本。

  11. 使用for循環(huán)和循環(huán)變量x迭代數(shù)組arr的內(nèi)容。

  12. 在控制臺(tái)上打印數(shù)組arr的值。

  13. for循環(huán)主體的結(jié)尾。

  14. 在控制臺(tái)上打印空行。

  15. 釋放數(shù)組arr的內(nèi)存。

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

  17. main()函數(shù)主體的結(jié)尾。

總結(jié):

  1. 常規(guī)數(shù)組的大小是固定的。一旦聲明,就不能修改它們的大小。

  2. 對(duì)于這些類(lèi)型的數(shù)組,內(nèi)存大小在編譯時(shí)確定。

  3. 動(dòng)態(tài)數(shù)組是不同的。它們的大小可以在運(yùn)行時(shí)更改。

  4. 在動(dòng)態(tài)數(shù)組中,大小在運(yùn)行時(shí)確定。 > LI> C++中的動(dòng)態(tài)數(shù)組是用new關(guān)鍵字聲明的。

  5. 我們使用方括號(hào)指定要存儲(chǔ)在動(dòng)態(tài)數(shù)組中的項(xiàng)數(shù)。

  6. 處理完數(shù)組后,我們可以使用delete操作符釋放內(nèi)存。

  7. 使用帶[]的delete運(yùn)算符釋放所有數(shù)組元素的內(nèi)存。

  8. 不帶[]的刪除只釋放單個(gè)元素的內(nèi)存。 > LI>沒(méi)有內(nèi)置的機(jī)制來(lái)調(diào)整C++數(shù)組的大小。

  9. 要使用列表初始值設(shè)定項(xiàng)初始化數(shù)組,我們不使用“=”運(yùn)算符。