動態配置
為什麼要用動態配置?
一般我們在使用陣列時,會在一開始宣告陣列的大小,你不可以隨時改變陣列的大小。
int N = 10;
int a[N] = {0};
但若是在一開始就宣告陣列的大小,如果我們沒用那麼多的話就浪費,如果用太多、超過的話又會造成 runtime error,怎麼辦呢?這就是為什麼要使用動態記憶體的原因了,因為動態配置陣列,可以隨心所欲的控制陣列的元素個數。
那又該怎麼用動態配置呢?
int N = 10;
int *a;
a = new int[N];
配置完後,存取方式就和一般的陣列並無二致。
如果已配置了一塊記憶體空間,那當然要在使用完後釋放出去,否則你的程式記憶體會愈吃愈大,最後將因記憶體空間不足而跳出,記得,一個new就配一個delete。
delete [] a;
練習
翻轉吧,身高!
如果題目沒有限制 N<=100,那該如何設定陣列大小呢?
動態配置二維陣列
Input 說明
索取一個整數row
索取一個整數column
Output 說明
印出一個二維列,
第一行第一列的值為0,
第x行第y列的值為第(x-1)行第(y)列且第(x)行第(y-1)列的值加1
範例輸入
輸入二維陣列的row:3
輸入二維陣列的column:4
範例輸出
0 1 2 3
1 2 3 4
2 3 4 5
Solution
int i,j;
int data_height,data_width;
int **data;
cout << "輸入二維陣列的row:";
cin >> data_height;
cout << "輸入二維陣列的column:";
cin>> data_width;
//配置 data[data_height][data_width]
data = new int*[data_height];
for(i = 0; i < data_height; i++)
data[i] = new int[data_width];
//給陣列值並列印
for(i=0;i < data_height; i++){
for(j=0;j < data_width; j++){
data[i][j]=i + j;
cout << data[i][j] << "\t";
}
cout << endl;
}
//釋放記憶體空間
for(i = 0; i < data_height; i++)
delete [] data[i];
delete [] data;