考試時,常常會遇到需要輸入一個整數,然後根據這個整數來配置記憶體的情況。這時候,學生要知道如何有效地利用 C++ 的記憶體配置來解決問題。程式中的 Data d[n] 就是一個典型的例子。
1. Data d[n] 當作動態記憶體配置
在許多考試或練習中,學生可能會先輸入一個整數 n,這個數字決定了接下來需要多少記憶體來儲存資料。像這樣的寫法:這裡的 d[n] 是根據輸入的 n 來配置陣列的空間。雖然看起來很方便,但這其實只是在 C++ 的某些編譯器(如 GCC)中允許的變數長度陣列(Variable Length Arrays, VLA),而不是標準的 C++ 寫法。VLA 是一種能根據變數大小動態分配記憶體的陣列,這種寫法雖然在某些情況下看起來像是動態記憶體分配,但它不是標準的 C++,而且在不同的環境或編譯器中可能無法使用。
標準的做法:使用 new
標準的 C++ 需要使用 new 來真正做到動態記憶體配置,這樣程式在執行時才能依據使用者輸入的數值來分配記憶體,像這樣:這樣的做法能保證程式在任何標準的 C++ 環境中運作,並且記憶體是根據實際需求動態分配的。- int main()
- {
- cin >> n;
- Data* d = new Data[n]; // 動態記憶體配置
- for(int i = 0; i < n; i++)
- {
- cin >> d[i].a >> d[i].b;
- d[i].c = d[i].a * d[i].b;
- }
- sort(d, d+n, compare);
- for(int i = 0; i < n; i++)
- cout << d[i].a << 'x' << d[i].b << '=' << d[i].c << endl;
-
- delete[] d; // 釋放記憶體
- return 0;
- }
複製代碼 |