C++深入淺出探索數(shù)據(jù)結(jié)構(gòu)的原理
一、前言
因為C++的數(shù)據(jù)結(jié)構(gòu)很多,很復(fù)雜,一篇文章根本講不到所有的數(shù)據(jù)結(jié)構(gòu)。即使寫出來,看了一遍效果也不好,所以博主打算最近都更新C++的數(shù)據(jù)結(jié)構(gòu)類型,讓讀者弄懂C++的數(shù)據(jù)結(jié)構(gòu)與算法。
二、C++的數(shù)據(jù)結(jié)構(gòu)
C/C++ 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,但是結(jié)構(gòu)是 C++ 中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲不同類型的數(shù)據(jù)項。
結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要建立一個游戲中的英雄,您可能需要記錄下每個應(yīng)用的下列屬性:
- life_value:生命值
- hero_name:英雄名稱
- skill:技能
- ID:英雄id
三、定義結(jié)構(gòu)
為了定義結(jié)構(gòu),您必須使用 struct 語句。struct 語句定義了一個包含多個成員的新的數(shù)據(jù)類型。
下面是聲明一個結(jié)構(gòu)體類型 Heros,變量為 hero:
例子:
struct Heros { char life_value[50]; char hero_name[50]; char skill[100]; int ID; } hero;
四、訪問結(jié)構(gòu)成員
為了訪問結(jié)構(gòu)的成員,我們使用成員訪問運算符(.)。成員訪問運算符是結(jié)構(gòu)變量名稱和我們要訪問的結(jié)構(gòu)成員之間的一個句號。
例子:
#include <iostream> #include <cstring> using namespace std; // 聲明一個結(jié)構(gòu)體類型 Heros struct Heros { char life_value[50]; char hero_name[50]; char skill[100]; int ID; } hero; int main( ) { Heros(Hero1); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero1 Heros(Hero2); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero2 // Hero1 詳述 strcpy( Hero1.life_value, "500"); strcpy( Hero1.hero_name, "武器大師"); strcpy( Hero1.skill, "反擊風暴"); Hero1.ID = 996; // Hero2 詳述 strcpy( Hero2.life_value, "600"); strcpy( Hero2.hero_name, "德瑪西亞皇子"); strcpy( Hero2.skill, "人在塔在"); Hero2.ID = 007; // 輸出 Hero1 信息 cout << "第一個英雄的生命值為 : " << Hero1.life_value <<endl; cout << "第一個英雄的名稱為 : " << Hero1.hero_name <<endl; cout << "第一個英雄的技能為 : " << Hero1.skill <<endl; cout << "第一個英雄的ID為 : " << Hero1.ID <<endl; cout << endl; // 輸出 Heor2 信息 cout << "第二個英雄的生命值為 : " << Hero2.life_value <<endl; cout << "第二個英雄的生命值為 : " << Hero2.hero_name <<endl; cout << "第二個英雄的生命值為 : " << Hero2.skill <<endl; cout << "第二個英雄的ID為 : " << Hero2.ID <<endl; return 0; }
輸出:
第一個英雄的生命值為 : 500
第一個英雄的名稱為 : 武器大師
第一個英雄的技能為 : 反擊風暴
第一個英雄的ID為 : 996
第二個英雄的生命值為 : 600
第二個英雄的生命值為 : 德瑪西亞皇子
第二個英雄的生命值為 : 人在塔在
第二個英雄的ID為 : 7
五、結(jié)構(gòu)作為函數(shù)參數(shù)
您可以把結(jié)構(gòu)作為函數(shù)參數(shù),傳參方式與其他類型的變量或指針類似。您可以使用上面實例中的方式來訪問結(jié)構(gòu)變量:
#include <iostream> #include <cstring> using namespace std; void printHero(struct Heros hero); // 聲明一個結(jié)構(gòu)體類型 Heros struct Heros { char life_value[50]; char hero_name[50]; char skill[100]; int ID; } hero; int main( ) { Heros(Hero1); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero1 Heros(Hero2); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero2 // Hero1 詳述 strcpy( Hero1.life_value, "500"); strcpy( Hero1.hero_name, "武器大師"); strcpy( Hero1.skill, "反擊風暴"); Hero1.ID = 996; // Hero2 詳述 strcpy( Hero2.life_value, "600"); strcpy( Hero2.hero_name, "德瑪西亞皇子"); strcpy( Hero2.skill, "人在塔在"); Hero2.ID = 007; // 輸出 Hero1 信息 printHero(Hero1); // 輸出 Hero2 信息 printHero(Hero2); return 0; } void printHero(struct Heros hero) { cout << "英雄的生命值:" << hero.life_value << endl; cout << "英雄的名稱:" << hero.hero_name << endl; cout << "英雄的技能:" << hero.skill << endl; cout << "英雄的ID:" << hero.ID << endl; }
輸出:
英雄的生命值:500
英雄的名稱:武器大師
英雄的技能:反擊風暴
英雄的ID:996
英雄的生命值:600
英雄的名稱:德瑪西亞皇子
英雄的技能:人在塔在
英雄的ID:7
六、指向結(jié)構(gòu)的指針
您可以定義指向結(jié)構(gòu)的指針,方式與定義指向其他類型變量的指針相似,如下所示:
struct Books *struct_pointer;
現(xiàn)在,您可以在上述定義的指針變量中存儲結(jié)構(gòu)變量的地址。為了查找結(jié)構(gòu)變量的地址,請把 & 運算符放在結(jié)構(gòu)名稱的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結(jié)構(gòu)的指針訪問結(jié)構(gòu)的成員,您必須使用 -> 運算符,如下所示:
struct_pointer->title;
例子:
#include <iostream> #include <cstring> using namespace std; void printHero(struct Heros *hero); // 聲明一個結(jié)構(gòu)體類型 Heros struct Heros { char life_value[50]; char hero_name[50]; char skill[100]; int ID; }; int main( ) { Heros(Hero1); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero1 Heros(Hero2); // 定義結(jié)構(gòu)體類型 Heros 的變量 Hero2 // Hero1 詳述 strcpy( Hero1.life_value, "500"); strcpy( Hero1.hero_name, "武器大師"); strcpy( Hero1.skill, "反擊風暴"); Hero1.ID = 996; // Heor2 詳述 strcpy( Hero2.life_value, "600"); strcpy( Hero2.hero_name, "德瑪西亞皇子"); strcpy( Hero2.skill, "人在塔在"); Hero2.ID = 007; // 通過傳 Hero1 的地址來輸出 Hero1 信息 printHero(&Hero1); // 通過傳 Hero2 的地址來輸出 Hero2 信息 printHero(&Hero2); return 0; } void printHero(struct Heros *hero) { cout << "英雄的生命值:" << hero->life_value << endl; cout << "英雄的名稱:" << hero->hero_name << endl; cout << "英雄的技能:" << hero->skill << endl; cout << "英雄的ID:" << hero->ID << endl; }
輸出:
英雄的生命值:500
英雄的名稱:武器大師
英雄的技能:反擊風暴
英雄的ID:996
英雄的生命值:600
英雄的名稱:德瑪西亞皇子
英雄的技能:人在塔在
英雄的ID:7
以上就是C++深入淺出探索數(shù)據(jù)結(jié)構(gòu)的原理的詳細內(nèi)容,更多關(guān)于C++數(shù)據(jù)結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++11中的時間庫std::chrono(引發(fā)關(guān)于時間的思考)
這篇文章主要介紹了C++11中的時間庫std::chrono(引發(fā)關(guān)于時間的思考),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04C++應(yīng)用Eigen庫對應(yīng)實現(xiàn)matlab中部分函數(shù)問題
這篇文章主要介紹了C++應(yīng)用Eigen庫對應(yīng)實現(xiàn)matlab中部分函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12C++實現(xiàn)LeetCode(676.實現(xiàn)神奇字典)
這篇文章主要介紹了C++實現(xiàn)LeetCode(676.實現(xiàn)神奇字典),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08