假設咱們要存儲有關籃球運動員的信息,則可能存儲Ta的姓名、工資、身高、體重、平均得分等,但願有一種數據格式能夠將這些信息存放在一個單元中。算法
所以引入告終構的概念數組
結構是用戶定義的類型函數
結構中全部元素的類型能夠不相同code
建立結構包括兩步:orm
1.定義結構描述——它描述並標記了可以存儲在結構中的各類數據類型對象
2.按描述建立結構變量(結構數據對象)內存
結構體成員默認爲 publicstring
它的本質是建立了一個名爲information的新的數據類型io
struct information { char name[20]; float salary; double height; };
information zhangsan; //C++容許在聲明結構變量時省略關鍵字 struct information lisi; //或者同時在定義結構後面聲明 struct information { char name[20]; float salary; double height; }wangmazi;
其中zhangsan,lisi,wangmazi都是information結構體的實例,能夠被分配和擁有本身的內存,以保存其成員數據。form
儘管3個結構體變量具備不一樣的名稱,但每一個變量都包含具備相同名稱的成員。
有兩種方式初始結構體變量:使用初始化列表或構造函數
初始化結構體變量成員的最簡單的方法是使用初始化列表。初始化列表是用於初始化一組內存位置的值列表。列表中的項目用逗號分隔並用大括號括起來。
定義和初始化information變量的方式是:先指定變量名,後接賦值運算符和初始化列表:
information LiHua = {"LiHua",5000,191};
也能夠僅初始化結構體變量的部分紅員:
information LiHua = {"LiHua",5000};
這裏只有name和salary成員被初始化,height成員未初始化。可是,若是某個結構成員未被初始化,則全部跟在它後面的成員都須要保留爲未初始化。使用初始化列表時,C++不提供跳過成員的方法。
還有一點很重要,不能在結構體聲明中初始化結構體成員,由於結構體聲明只是建立一個新的數據類型,還不存在這種類型的變量。
如下是一個名爲 Employee 的結構體的聲明語句,它包含一個具備兩參數的構造函數,以便在建立一個 Employee 變量而不向其傳遞任何參數時,提供默認值:
struct Employee { string name; // 員工姓名 int vacationDays, // 容許的年假 daysUsed; //已使用的年假天數 Employee (string n ="",int d = 0) // 構造函數 { name = n; vacationDays = 10; daysUsed = d; } };
結構體成員的訪問方式與類的公共成員同樣,都是使用點運算符。可是,類的數據成員一般是私有的,必須經過函數訪問。由於結構數據成員是公共的,因此它們能夠被直接訪問,而且能夠像常規變量同樣使用。
zhangsan.name="張三"; zhangsan.salary=4000; cout<<zhangsan.name<<endl;
定義:該數組的每一個元素都是一個結構體。
//如下語句定義了一個名爲infoList的數組,它有20個元素,每一個元素都是一個information結構體 information infoList[20]; //下面的表達式引用了infoList[5]的salary成員 infoList[5].salary;
在算法競賽中結構體的使用很是廣泛,務必掌握