想像一下…
用前面十二個單元的知識,這份通訊錄怎麼存?
大概是三個陣列(或三個 vector):
string name[35]; // 姓名
int seat[35]; // 座號
string phone[35]; // 電話
第 i 位同學的資料= name[i]、seat[i]、phone[i]——同一個人被拆在三個地方,靠同一個索引 i 勉強湊成一組。這種存法叫平行陣列(parallel arrays),它能動,但用起來處處彆扭:排序時三個陣列要一起搬,漏搬一個,某人的座號就配上別人的電話;想寫一個「印出一位同學完整資料」的函式,得把三個陣列全部塞進參數表;老師要加欄位,整份程式跟著大改。
問題的根源只有一個:「同一位同學」在程式裡不是一個東西。我們真正想要的,是把姓名、座號、電話綁成一包——一包就是一位同學,搬家一起搬、傳遞一起傳。
第十一單元結尾預告過、上一單元結尾又點名一次的主角,現在正式登場:結構體(struct)。它讓你自己定義新的資料型態——想綁幾個欄位就綁幾個,每個欄位都有自己的名字。學會它,通訊錄只要一個陣列;再把 11.6 的比較函式以 operator < 的樣貌裝進去,sort 一行就能把整包資料排好。