簡體   English   中英

如何在C ++中的類中聲明二維動態數組

[英]How do I declare a two dimensional dynamic array inside of a Class in C++

我有一個需要二維數組的類,可以在構造過程中通過向其傳遞兩個參數來對其進行初始化。 如何在類中聲明二維動態數組。

class Life
{
public:
    Life (int rows, int cols);
    ~Life ();
    Life(const Life& orig);
    Life& operator=(const Life& rhs);

    void init();
    void print();
    void update();
    void instructions();
    bool user_says_yes();
private:
    int rows;
    int cols;

    int neighbor_count(int row, int col);
    int** grid;
};

Life::Life(int row, int col)
{
    rows = row;
    cols = col;
    grid = new [rows][cols];
}

我知道數組有問題,因為在構造函數中它說它應該是一個常量值。 但是,直到用戶輸入值,我才知道該值。 但是以某種方式,我需要在此類中具有一個數組,該數組將動態創建為指定的大小。 目前,我不能使用向量,但是如果您知道如何使其與向量一起使用,它可能會對其他人有所幫助。

我這樣做是這樣的:

grid=new int*[rows];
for(int i=0;i<rows;i++){
      grid[i]=new int[cols];
}

第一行初始化一個數組,該數組將包含總共指針,然后分配這些指針中的每一個以容納總共cols整數。 在你的析構函數中:

for(int i=0;i<rows;i++){
      delete[] grid[i];
}
delete[] grid;

在這里,您必須首先取消分配行,因為網格正在存儲它們的地址,而首先刪除它會導致您丟失它們。

請記住,如果您復制此類的對象,則也需要對副本進行此初始化。 其中包括=運算符和復制構造函數。

沒錯,您應該使用向量向量。 但是因為你不能...

有兩種方法可以處理二維向量。 第一種是創建一個一維矢量,並在訪問時將兩個維壓縮為一個維。 如果要將其視為二維,可以將其放在類方法后面。 grid = new int[rows*cols]; grid[c*rows+r]

第二種方法是創建一個指針數組,其中每個指針都是一行的一維數組。 您需要單獨分配所有行指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM