您好,登錄后才能下訂單哦!
本篇內容介紹了“c++數組初始化的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
c++初始化數組的方法:1、先定義數組再給數組賦值,語法“數據類型 數組名[length];數組名[下標]=值;”;2、定義數組時初始化數組,語法“數據類型 數組名[length]=[值列表]”。
本教程操作環境:windows7系統、C++17版本、Dell G3電腦。
有時在程序中設置變量值比輸入變量值更合適。但是,為數組的各個元素編寫單獨的賦值語句可能意味著大量的輸入,對于大型數組而言尤其如此。
例如,來看一個程序:
#include <iostream> #include <iomanip> using namespace std; int main() { const int NUM_MONTHS = 12; int days[NUM_MONTHS]; days[0] = 31; // January days[1] = 28; // February days[2] = 31; // March days[3] = 30; // April days[4] = 31; // May days[5] = 30; // June days[6] = 31; // July days[7] = 31; // August days[8] = 30; // September days[9] = 31; // October days[10] = 30; // November days[11] = 31; // December for (int month = 0; month < NUM_MONTHS; month++) { cout << "Month "<< setw (2) << (month+1) << " has "; cout << days[month] << " days.\n"; } return 0; }
程序輸出結果:
Month 1 has 31 days. Month 2 has 28 days. Month 3 has 31 days. Month 4 has 30 days. Month 5 has 31 days. Month 6 has 30 days. Month 7 has 31 days. Month 8 has 31 days. Month 9 has 30 days. Month 10 has 31 days. Month 11 has 30 days. Month 12 has 31 days.
幸運的是,還有一個選擇,C++ 允許在定義數組時初始化數組。通過使用初始化列表,可以在創建數組時輕松初始化數組的所有元素。以下語句定義 days 數組,并使用之前程序中賦值語句集所建立的相同值對其進行初始化:
int days [NUM_MONTHS] = {31,28,31,30,31,30,31,31,30,31,30, 31};
這些值按照它們出現在列表中的順序存儲在數組元素中(第一個值 31 存儲在 days[0] 中,第二個值 28 存儲在 days [1] 中,等等)。下圖 顯示了初始化后數組的內容。
下面程序是上邊程序的修改版。它在創建 days 數組時即對其進行了初始化,而不是使用單獨的賦值語句。請注意,初始化列表分散在多行中。該程序還添加了一個 string 對象數組來保存月份名稱:
#include <iostream> #include <iomanip> #include <string> using namespace std; int main() { const int NUM_MONTHS = 12; string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int month = 0; month < NUM_MONTHS; month++) { cout << setw(9) << left << name[month] << " has "; cout << days [month] << " days. \n"; } return 0; }
程序輸出結果:
January has 31 days. February has 28 days. March has 31 days. April has 30 days. May has 31 days. June has 30 days. July has 31 days. August has 31 days. September has 30 days. october has 31 days. November has 30 days. December has 31 days.
到目前為止,已經演示了如何使用數值填充數組,然后顯示所有的值。但是,有時候可能還需要更多功能,例如從數組中檢索一個特定的值。下面程序是上面程序的變化版本,它可以顯示用戶選擇的月份中有多少天。
#include <iostream> #include <iomanip> #include <string> using namespace std; int main() { const int NUM_MONTHS = 12; int choice; string name[NUM_MONTHS]={ "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; cout << "This program will tell you how many days are "<< "in any month.\n\n"; // Display the months for (int month = 1; month <= NUM_MONTHS; month++) cout << setw (2) << month << " " << name [month-1] << endl; cout << "\nEnter the number of the month you want: "; cin >> choice; // Use the choice the user entered to get the name of // the month and its number of days from the arrays. cout << "The month of " << name [choice-1] << " has " << days[choice-1] << " days.\n"; return 0; }
程序輸出結果為:
This program will tell you how many days are in any month. 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 october 11 November 12 December Enter the number of the month you want: 4 The month of April has 30 days.
從數組元素1開始
真實世界中存在著大量的邏輯上以 1 開頭的事物,在給這樣的事物建立模型時,很多教師會偏向于讓學生不要使用元素 0,而改為從元素 1 開始存儲實際數據。一年中的月份數就是一個很好的例子。在這種情況下,可以聲明 name 和 days 數組每個都有 13 個元素,并按以下方式對它們進行初始化:
string name[NUM_MONTHS+1]={" ", "January", "February", "March", "April", "May" , "June", "July", "August", "September", "october", "November", "December"}; int days[NUM_MONTHS+1] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
注意數組元素 0 沒有被使用。它只是一個虛擬的值。這樣可以將一月份的名稱存儲在 name[1] 中,二月份的名稱將存儲在 name[2] 中,以此類推。同樣,1 月份的天數將保存在 days[1] 元素中,2 月份的天數將保存在 days[2] 元素中,以此類推。
如果使用上述方法定義和初始化數組,則循環應該改寫為以下形式。它將顯示數組元素 1?12 的內容,而不是像以前那樣顯示元素 0?11。
for (int month = 1; month <= NUM_MONTHS; month++) { cout << setw(9) << left << name[month] << " has "; cout << days[month] << " days.\n"; }
如果實際數據以元素 1 開始存儲,那么也不需要將數組下標加 1 來定位特定的數據。以下是列出每個月編號和名稱的語句修改:
for (int month = 1; month <= NUM_MONTHS; month++) cout << setw (2) << month << " " << name [month] << endl;
顯示用戶所選月份的天數的代碼應修改為如下所示。
cout << "The month of " << name[choice] << " has "<< days [choice] << " days . \n";
數組部分初始化
當一個數組被初始化時,C++ 并不是必須獲得每個元素的值,也可以只初始化數組的一部分,如下所示:
int numbers[7] = {1, 2, 4, 8};
這個定義只初始化了一個7元素數組中的前 4 個元素,如下圖所示。
值得一提的是,圖 2 中未被初始化的元素將全部被設置為零。這是數字數組部分初始化時發生的情況。當一個 string 對象數組被部分初始化時,未初始化的元素將全部包含空字符串,即長度為 0 的字符串。即使部分初始化的數組在局部定義,也會如此。但是,如果本地數組完全未初始化,則其元素將包含“垃圾”,就像其他局部變量一樣。
下面的程序顯示了在部分初始化之后的 numbers 數組的內容:
#include <iostream> using namespace std; int main () { const int SIZE = 7; int numbers[SIZE] = {1, 2, 4, 8}; // Initialize the first 4 elements cout << "Here are the contents of the array: \n"; for (int index = 0; index < SIZE; index++) cout << numbers [index] << " "; cout << endl; return 0; }
程序輸出結果:
Here are the contents of the array: 1 2 4 8 0 0 0
雖然數組初始化列表的值可以比數組的元素少,但不允許有比數組元素更多的值。以下語句是非法的,因為 numbers 數組只能包含 7 個值,但初始化列表中卻包含 8 個值。
int numbers [7] = {1, 2, 4, 8, 3, 5, 7, 9}; //不合法
另外,如果留下了某個元素未初始化,那么該元素之后的所有元素都應該保留為未初始化。C++ 不提供跳過初始化列表中元素的方法。以下是另一個非法的例子:
int numbers [7] = {1, , 4, , 3, 5, 7}; // 不合法
隱式數組大小
可以通過提供一個包含每個元素值的初始化列表來定義一個數組而不指定它的大小。C++ 會計算初始化列表中的項目數,并為數組提供相應數量的元素。例如,以下定義創建 了一個包含5個元素的數組:
double ratings [] = {1.0,1.5,2.0,2.5,3.0};
注意,如果省略大小聲明符,則必須指定一個初始化列表。否則,C++ 不知道該數組有多大。
初始化變量的新方法
到目前為止,已經介紹過的定義和初始化常規變量的方法是使用賦值語句,示例如下:
int value = 5;
但是,我們已經學習過使用函數、數組以及類,所以現在是時候來介紹另外兩種在定義變量的同時即進行初始化的方法。
第一種新方法是使用函數符號初始化變量。它看起來就像是給一個函數傳遞參數。如果您已經掌握了類的內容,那么就會注意到,它也很像是在創建類對象時給一個構造函數傳遞值。以下是使用函數符號定義變量 value 并初始化其值為 5 的示例語句:
int value (5);
第二種初始化變量的新方法是 C++ 11 中新引入的,使用大括號表示法。它看起來就像是剛剛上面所看到的初始化數組的方法,但是其中有兩點區別:
因為常規變量只能一次保存一個值,所以通過這種方法初始化變量時,大括號中只有一個值;
和數組初始化列表不一樣,通過這種方法初始化變量時,在大括號前面沒有賦值運算符(=)。
以下是使用大括號表示法定義變量 value 并初始化其值為5的示例語句。
int value{5}; //該語句僅在C++ 11或更高版本中合法
絕大多數程序員會繼續使用賦值運算符來初始化常規變量,本書也將如此,但是,大括號表示法提供了一項優點,它會檢查用來初始化變量的值,并確保匹配變量的數據類型。例如,假設 doubleVal 是一個 double 類型變量,存儲在其中的值為 6.2。則使用賦值運算符時,可以編寫以下兩種形式的語句之一:
int valuel = 4.9; //該語句將給valuel賦值為。4 int vaule2 = doubleVal; // 該語句將給 value2 賦值為 6
在這兩種情況下,值的小數點部分都會被先截斷,然后才賦值給被定義的變量。這雖然可能會導致一些問題,但 C++ 編譯器是允許的,它也會提出警告,但卻仍然能生成可執行文件,并且可以運行。不過,如果在這里使用的是大括號表示法,則編譯器會指出這些語句產生了一個錯誤,并且不會生成可執行文件。必須先修復該錯誤,然后重新編譯項目才能運行該程序。
“c++數組初始化的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。