動態配置


為什麼要用動態配置?

一般我們在使用陣列時,會在一開始宣告陣列的大小,你不可以隨時改變陣列的大小。

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;

results matching ""

    No results matching ""