在类中动态分配对象指针的二维数组

目前我正在努力在运行时动态分配数组。 来自Java,习惯于在类框架中声明数组,并且只需要实现中的大小。

这是我发现的动态分配二维数组的方法:

Grid.h   
Block** grid;

Grid.cpp
grid = new Block*[size]
for(int i = 0 ; i < size ; i++)
    grid[i] = new Block[size]

尽管处理对象我总是被告知,使用指向对象的指针而不是存储对象本身的性能明显要好得多,但这种方法很好。 所以当我试图让数组指针的第二维像这样:

Grid.cpp
grid = new Block*[size]
    for(int i = 0 ; i < size ; i++)
        grid[i] = new Block*[size];

当我将代码更改为此时,出现错误:

error: assigning to 'Block *' from incompatible type 'Block **'; dereference with *
        grid[i] = new Block* [size];
                ^ ~~~~~~~~~~~~~~~~~
                  *

对于C ++的做事方式略有新意,有人能告诉我我做错了什么吗? 或者即使我试图完全错误的事情?

提前致谢!


动态2D数组是指向数组的指针数组。 您应该首先初始化指针数组,然后使用循环对其他数组进行初始化。

这里使用int创建一个数组[rowCount] [colCount]的例子:

int** array = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
    array[i] = new int[colCount];

否则,当然你可以在堆栈上总是有一个二维数组:

int array[rowCount][colCount];

我不会推荐你写这种类型的代码,但如果你仍然想破解你的出路,你可以做这样的事情: -

int main()
{
Block*** grid;      

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

/*Here, we have created a grid of pointers*/

/*

|Block**[10]|

|Block[0] **|------------->|Block* [10]|
|Block[1] **|------------->|Block* [10]|
|Block[2] **|------------->|Block* [10]|
|Block[3] **|------------->|Block* [10]|
..
..
|Block[9] **|------------->|Block* [10]|

*/

for(int i = 0 ; i < 10 ; i++)
{       
    for(int j = 0 ; j < 10 ; j++)
    {
        grid[i][j] = new Block[10]; 
    }
}

/*

|Block**[10]|

|Block[0] **|------------->|Block* [0]|------------->|Block1|Block2| .. |Block10|
                           |Block* [1]|------------->|Block1|Block2| .. |Block10|
                           |Block* [2]|------------->|Block1|Block2| .. |Block10|
                           ..
                           |Block* [9]|------------->|Block1|Block2| .. |Block10|


|Block[1] **|------------->|Block* [0]|------------->|Block1|Block2| .. |Block10|
                           |Block* [1]|------------->|Block1|Block2| .. |Block10|
                           |Block* [2]|------------->|Block1|Block2| .. |Block10|
                           ..
                           |Block* [9]|------------->|Block1|Block2| .. |Block10|          
|Block[2] **|
|Block[3] **|
..
..
|Block[9] **|

*/
 }

使用2d数组的线性表示形式:

std::unique_ptr<int[]> array(new int[rowCount*colCount]);

for (size_t r = 0; r < rowCount; r++)
  for (size_t c = 0; c < colCount; c++)
    (array.get())[r*colCount + c] = r*c;
链接地址: http://www.djcxy.com/p/72923.html

上一篇: Dynamically allocating a 2D array of object pointers in a class

下一篇: C++ copy constructor for class with dynamically allocated array