深入淺出談 Array:從記憶體配置看時間複雜度
photo by Reed Mok 想像你是一位老師,要管理一個新班級的學生名單 人數少的時候,你可以直接用名字來記住每一位學生,但當學生人數一多,要快速找到某一位學生就變得困難 情境 A:變數分散管理 如果我們像這樣單獨宣告變數來存學生名字: string student1 = "Alice"; string student2 = "Bob"; string student3 = "Charlie"; // ... 如果有 50 個學生,變數會多到無法管理 這種方式的問題在於: 沒有順序性:變數之間沒有邏輯上的關聯 無法索引:不能用「第 3 個學生」這種方式來存取 難以自動化:無法用迴圈(Loop)來批次處理這群資料 情境 B:使用 Array 統一管理 這時候,如果替每位學生分配一個固定的「座號」,並依照座號的順序將學生資料排排站(存放起來),只要知道座號,就能直接找到對應的學生 struct Student { string name; }; // 學生名單 (Array) Student students[] = { {"Alice"}, // index 0 (座號 1) {"Bob"}, // index 1 (座號 2) {"Charlie"} // index 2 (座號 3) }; const int numStudents = 3; Student* findStudentBySeatNumber(int seatNumber) { // 檢查座號是否合法 if (seatNumber < 1 || seatNumber > numStudents) { return nullptr; } // 透過索引直接取得資料 (Array Index 從 0 開始) return &students[seatNumber - 1]; } 這就是 Array 的核心精神 ...