2017-03-08 50 views
0

我只找到1d數組的解決方案,但無法將它們應用於2d數組。 可能的解決方案包括「矢量」,「模板」和「指向數組的指針」。C++在構造函數中設置類成員數組的2d數組大小

我知道我可以讓矢量工作,但我寧願使用其他2.最好是模板,因爲我不想手動摧毀,但指針也工作。 (指針將指向在構造函數中創建的數組)。

該類包含一個稱爲屏幕的空2D數組。構造函數應該設置其大小。我嘗試了太多的東西來將它們全部列在這裏,但我會展示我現在擁有的東西。 (我試圖最後一件事是指向數組在構造函數中創建的。在這種情況下的屏幕是一個字符指針)在新的表達式

Screen::Screen(const int w, const int h) : screen(new char[h][w]) {} { 
    width = w; 
    height = h; 
} 

數組大小必須是恆定的

我失敗實施這些策略之一,並試圖使其工作時收到許多種錯誤。我將如何解決這個問題? (主要是我想知道如何用模板做到這一點,如果不可能,然後指針指向在構造函數中創建的數組)

+1

向量,模板和指向數組的指針如何連接...無論如何,我不明白你的問題。發佈一些你試過寫的實際代碼,我們會看到它有什麼問題。 – DeiDei

+0

首先添加一些代碼,告訴我們你的嘗試。 – vsoftco

+0

編譯時是否已知'w','h'值? –

回答

1

這個問題有點含糊,但它聽起來像你想動態地分配給定的數組輸入。 編輯我改變了答案以匹配您提供的代碼。這給出了高度和寬度的二維字符數組。

class Screen { 
    private: 
     char **data; 
     int rows; 
     int columns; 

    public: 
     Screen(int num_rows, int num_cols); 
}; 

Screen::Screen(int num_rows, int num_cols) { 
    data = new char * [num_rows]; 
    for (int i = 0; i < num_rows; ++i) { 
     data[i] = new char[num_cols]; 
    } 
    rows = num_rows; 
    columns = num_cols; 
} 

這創建了一個空的二維字符數組。

說明:c中的所有數組只是指向已聲明類型的內存中第一個塊的指針。通過讓成員變量爲雙指針,你有一個char指針數組,每個數組指向每個數組中的第一個值。

但是要小心,你需要釋放數據變量來避免內存泄漏,通過聲明一個析構函數。

Screen::~Screen() { 
    for (int i = 0; i < rows; ++i) { 
     delete[] data[i]; 
    } 
    delete[] data; 
} 
+1

你忘了在析構函數中釋放某些東西。 '刪除[]數據' –

+0

所以我做了,謝謝指出! – rhysvo

+0

這是一個很大的混亂和違反三規則 - 你應該使用矢量或向量的矢量,而不是這種方法 –