溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++數(shù)組初始化的方法是什么

發(fā)布時間:2021-10-15 14:31:21 來源:億速云 閱讀:236 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“c++數(shù)組初始化的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

c++初始化數(shù)組的方法:1、先定義數(shù)組再給數(shù)組賦值,語法“數(shù)據(jù)類型 數(shù)組名[length];數(shù)組名[下標]=值;”;2、定義數(shù)組時初始化數(shù)組,語法“數(shù)據(jù)類型 數(shù)組名[length]=[值列表]”。

c++數(shù)組初始化的方法是什么

本教程操作環(huán)境:windows7系統(tǒng)、C++17版本、Dell G3電腦。

有時在程序中設(shè)置變量值比輸入變量值更合適。但是,為數(shù)組的各個元素編寫單獨的賦值語句可能意味著大量的輸入,對于大型數(shù)組而言尤其如此。

例如,來看一個程序:

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

程序輸出結(jié)果:

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++ 允許在定義數(shù)組時初始化數(shù)組。通過使用初始化列表,可以在創(chuàng)建數(shù)組時輕松初始化數(shù)組的所有元素。以下語句定義 days 數(shù)組,并使用之前程序中賦值語句集所建立的相同值對其進行初始化:

int days [NUM_MONTHS] = {31,28,31,30,31,30,31,31,30,31,30, 31};

這些值按照它們出現(xiàn)在列表中的順序存儲在數(shù)組元素中(第一個值 31 存儲在 days[0]  中,第二個值 28 存儲在 days [1] 中,等等)。下圖 顯示了初始化后數(shù)組的內(nèi)容。

c++數(shù)組初始化的方法是什么

下面程序是上邊程序的修改版。它在創(chuàng)建 days 數(shù)組時即對其進行了初始化,而不是使用單獨的賦值語句。請注意,初始化列表分散在多行中。該程序還添加了一個 string 對象數(shù)組來保存月份名稱:

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

程序輸出結(jié)果:

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.

到目前為止,已經(jīng)演示了如何使用數(shù)值填充數(shù)組,然后顯示所有的值。但是,有時候可能還需要更多功能,例如從數(shù)組中檢索一個特定的值。下面程序是上面程序的變化版本,它可以顯示用戶選擇的月份中有多少天。

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

程序輸出結(jié)果為:

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.

從數(shù)組元素1開始

真實世界中存在著大量的邏輯上以 1 開頭的事物,在給這樣的事物建立模型時,很多教師會偏向于讓學生不要使用元素 0,而改為從元素 1 開始存儲實際數(shù)據(jù)。一年中的月份數(shù)就是一個很好的例子。在這種情況下,可以聲明 name 和 days 數(shù)組每個都有 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};

注意數(shù)組元素 0 沒有被使用。它只是一個虛擬的值。這樣可以將一月份的名稱存儲在 name[1] 中,二月份的名稱將存儲在 name[2] 中,以此類推。同樣,1 月份的天數(shù)將保存在 days[1] 元素中,2 月份的天數(shù)將保存在 days[2] 元素中,以此類推。

如果使用上述方法定義和初始化數(shù)組,則循環(huán)應該改寫為以下形式。它將顯示數(shù)組元素 1?12 的內(nèi)容,而不是像以前那樣顯示元素 0?11。

for (int month = 1; month <= NUM_MONTHS; month++)
{
    cout << setw(9) << left << name[month] << " has ";
    cout << days[month] << " days.\n";
}

如果實際數(shù)據(jù)以元素 1 開始存儲,那么也不需要將數(shù)組下標加 1 來定位特定的數(shù)據(jù)。以下是列出每個月編號和名稱的語句修改:

for (int month = 1; month <= NUM_MONTHS; month++)
    cout << setw (2) << month << " " << name [month] << endl;

顯示用戶所選月份的天數(shù)的代碼應修改為如下所示。

cout << "The month of " << name[choice] << " has "<< days [choice] << " days . \n";

數(shù)組部分初始化

當一個數(shù)組被初始化時,C++ 并不是必須獲得每個元素的值,也可以只初始化數(shù)組的一部分,如下所示:

int numbers[7] = {1, 2, 4, 8};

這個定義只初始化了一個7元素數(shù)組中的前 4 個元素,如下圖所示。

c++數(shù)組初始化的方法是什么

值得一提的是,圖 2 中未被初始化的元素將全部被設(shè)置為零。這是數(shù)字數(shù)組部分初始化時發(fā)生的情況。當一個 string 對象數(shù)組被部分初始化時,未初始化的元素將全部包含空字符串,即長度為 0 的字符串。即使部分初始化的數(shù)組在局部定義,也會如此。但是,如果本地數(shù)組完全未初始化,則其元素將包含“垃圾”,就像其他局部變量一樣。

下面的程序顯示了在部分初始化之后的 numbers 數(shù)組的內(nèi)容:

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

程序輸出結(jié)果:

Here are the contents of the array:
1 2 4 8 0 0 0

雖然數(shù)組初始化列表的值可以比數(shù)組的元素少,但不允許有比數(shù)組元素更多的值。以下語句是非法的,因為 numbers 數(shù)組只能包含 7 個值,但初始化列表中卻包含 8 個值。

int numbers [7] = {1, 2, 4, 8, 3, 5, 7, 9};    //不合法

另外,如果留下了某個元素未初始化,那么該元素之后的所有元素都應該保留為未初始化。C++ 不提供跳過初始化列表中元素的方法。以下是另一個非法的例子:

int numbers [7] = {1, , 4, , 3, 5, 7};    // 不合法

隱式數(shù)組大小

可以通過提供一個包含每個元素值的初始化列表來定義一個數(shù)組而不指定它的大小。C++ 會計算初始化列表中的項目數(shù),并為數(shù)組提供相應數(shù)量的元素。例如,以下定義創(chuàng)建 了一個包含5個元素的數(shù)組:

double ratings [] = {1.0,1.5,2.0,2.5,3.0};

注意,如果省略大小聲明符,則必須指定一個初始化列表。否則,C++ 不知道該數(shù)組有多大。

初始化變量的新方法

到目前為止,已經(jīng)介紹過的定義和初始化常規(guī)變量的方法是使用賦值語句,示例如下:

int value = 5;

但是,我們已經(jīng)學習過使用函數(shù)、數(shù)組以及類,所以現(xiàn)在是時候來介紹另外兩種在定義變量的同時即進行初始化的方法。

第一種新方法是使用函數(shù)符號初始化變量。它看起來就像是給一個函數(shù)傳遞參數(shù)。如果您已經(jīng)掌握了類的內(nèi)容,那么就會注意到,它也很像是在創(chuàng)建類對象時給一個構(gòu)造函數(shù)傳遞值。以下是使用函數(shù)符號定義變量 value 并初始化其值為 5 的示例語句:

int value (5);

第二種初始化變量的新方法是 C++ 11 中新引入的,使用大括號表示法。它看起來就像是剛剛上面所看到的初始化數(shù)組的方法,但是其中有兩點區(qū)別:

  • 因為常規(guī)變量只能一次保存一個值,所以通過這種方法初始化變量時,大括號中只有一個值;

  • 和數(shù)組初始化列表不一樣,通過這種方法初始化變量時,在大括號前面沒有賦值運算符(=)。

以下是使用大括號表示法定義變量 value 并初始化其值為5的示例語句。

int value{5}; //該語句僅在C++ 11或更高版本中合法

絕大多數(shù)程序員會繼續(xù)使用賦值運算符來初始化常規(guī)變量,本書也將如此,但是,大括號表示法提供了一項優(yōu)點,它會檢查用來初始化變量的值,并確保匹配變量的數(shù)據(jù)類型。例如,假設(shè) doubleVal 是一個 double 類型變量,存儲在其中的值為 6.2。則使用賦值運算符時,可以編寫以下兩種形式的語句之一:

int valuel = 4.9;    //該語句將給valuel賦值為。4
int vaule2 = doubleVal;    // 該語句將給 value2 賦值為 6

在這兩種情況下,值的小數(shù)點部分都會被先截斷,然后才賦值給被定義的變量。這雖然可能會導致一些問題,但 C++ 編譯器是允許的,它也會提出警告,但卻仍然能生成可執(zhí)行文件,并且可以運行。不過,如果在這里使用的是大括號表示法,則編譯器會指出這些語句產(chǎn)生了一個錯誤,并且不會生成可執(zhí)行文件。必須先修復該錯誤,然后重新編譯項目才能運行該程序。

“c++數(shù)組初始化的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI