在类中动态分配对象指针的二维数组
目前我正在努力在运行时动态分配数组。 来自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