C++資料結構:初學者的結構導覽

你好,未來的C++開發者!今天,我們將進入C++結構的精彩世界。如果你是編程新手,也別擔心——我將成為你的友好導遊,把複雜的概念分解成容易消化的小塊。所以,拿起你喜歡的飲料,放鬆一下,我們一起深入探討吧!

C++ Data Structures

結構是什麼?

在我們深入研究之前,先從基礎開始。想象一下你在組織一個派對(因為誰不喜歡好的派對,對吧?)。你需要記錄每位賓客的各種細節——他們的名字、年齡以及是否帶來一道菜。在C++中,結構(或struct)就像是一個容器,可以將有關單一實體(在這裡是賓客)的所有不同信息打包在一起。

定義一個結構

讓我們看看如何在我們的派對中創建賓客結構:

struct PartyGuest {
string name;
int age;
bool bringingDish;
};

這段代碼中發生了什麼:

  1. 我們使用關鍵字struct告訴C++我們正在創建一個結構。
  2. 為我們的結構命名為PartyGuest
  3. 在大括號{}內,我們定義我們結構的成員:
  • name是一個字符串,用於存儲賓客的名字
  • age是一個整數,用於賓客的年齡
  • bringingDish是一個布爾值(true/false),用於表示他們是否帶來食物

記得在結構定義結束時加上分號。這是一個常見錯誤,所以一定要再三檢查!

存取結構成員

現在我們有了PartyGuest結構,讓我們看看如何使用它來跟蹤我們的賓客:

int main() {
PartyGuest alice;
alice.name = "Alice";
alice.age = 25;
alice.bringingDish = true;

cout << alice.name << " is " << alice.age << " years old and is ";
if (alice.bringingDish) {
cout << "bringing a dish to the party!";
} else {
cout << "not bringing a dish to the party.";
}

return 0;
}

在這個例子中:

  1. 我們創建了一個名為alicePartyGuest變量。
  2. 我們使用點(.)運算符來訪問並設置alice的成員。
  3. 然後我們使用同一個點運算符在打印有關Alice的信息時訪問成員。

當你運行此代碼時,它將輸出:

Alice is 25 years old and is bringing a dish to the party!

結構作為函數參數

當我們將結構與函數一起使用時,結構變得更加強大。讓我們創建一個函數來歡迎我們的派對賓客:

void greetGuest(PartyGuest guest) {
cout << "Welcome, " << guest.name << "! ";
if (guest.bringingDish) {
cout << "Thanks for bringing a dish!";
} else {
cout << "Enjoy the food!";
}
cout << endl;
}

int main() {
PartyGuest bob = {"Bob", 30, false};
greetGuest(bob);

return 0;
}

在這段代碼中:

  1. 我們定義了一個名為greetGuest的函數,該函數接受一個PartyGuest作為參數。
  2. main()中,我們使用簡寫初始化創建了一個新的賓客bob
  3. 我們將bob傳遞給我們的greetGuest函數。

這將輸出:

Welcome, Bob! Enjoy the food!

指向結構的指針

現在,讓我們談談指針。想象一下你是派對策劃者,你希望有效地更新賓客信息。指針使我們能夠直接訪問並修改原始結構,而不是使用副本。

void updateGuestAge(PartyGuest* guest, int newAge) {
guest->age = newAge;
}

int main() {
PartyGuest charlie = {"Charlie", 22, true};
cout << "Charlie's age before update: " << charlie.age << endl;

updateGuestAge(&charlie, 23);
cout << "Charlie's age after update: " << charlie.age << endl;

return 0;
}

在這個例子中:

  1. 我們定義了一個名為updateGuestAge的函數,該函數接受一個指向PartyGuest的指針和一個新的年齡。
  2. 我們使用箭頭運算符->通過指針訪問結構的成員。
  3. main()中,我們使用&運算符將charlie的地址傳遞給我們的函數。

這段代碼將輸出:

Charlie's age before update: 22
Charlie's age after update: 23

typedef關鍵字

最後但並非最不重要,讓我們談談typedef。這個關鍵字使我們能夠為數據類型創建別名,從而使我們的代碼更易於閱讀和維護。

typedef struct {
string name;
int age;
bool bringingDish;
} Guest;

int main() {
Guest david = {"David", 28, false};
cout << david.name << " is " << david.age << " years old." << endl;

return 0;
}

在這段代碼中:

  1. 我們使用typedef創建了一個別名Guest來表示我們的結構。
  2. 現在我們可以直接使用Guest,而不需要使用struct PartyGuest

這使得我們的代碼更乾淨,更易於閱讀,特別是在處理複雜的結構時。

結論

恭喜你!你剛剛走出了C++結構的世界第一步。我們已經涵蓋了很多內容,從定義結構到使用它們與函數和指針。請記住,練習成就完美,所以不要猶豫在您自己的代碼中嘗試這些概念。

以下是本章節中討論的方法的快速參考表:

方法 描述
定義結構 struct StructureName { /* 成員 */ };
存取成員 使用點運算符:structVariable.member
結構作為函數參數 通過值傳遞:functionName(StructureName variable)
指向結構的指針 使用箭頭運算符:structPointer->member
typedef 創建別名:typedef struct { /* 成員 */ } AliasName;

繼續編碼,保持好奇,愉快的結構設計!

Credits: Image by storyset