2010-05-06 137 views
1

比方说,我有这种动态创建多维数组:C++多维动态数组

int* *grid = new int*[gridSizeX]; 

for (int i=0; i<gridSizeX; i++) { 
    grid[i] = new int[gridSizeY]; 
} 

不应该是可能的现在访问像栅格[X] [Y] = 20个元素?

+2

是的。 {假设'x'在[0,'gridSizeX'内,'y'在[0,'gridSizeY'内)}}我推荐你使用'std :: vector'来为你管理内存。 – GManNickG 2010-05-06 01:31:01

+0

让我们看看这里,在相关的链接,我们发现http://stackoverflow.com/questions/1024772/dynamic-multidimensional-array和http://stackoverflow.com/questions/799373/array-of-pointers-to-multidimensional -arrays和http://stackoverflow.com/questions/1584100/converting-multidimensional-arrays-to-pointers-in-c还有其他人:我已经回答了至少三个版本的这许多卫星前。 – dmckee 2010-05-06 01:45:13

+0

AraK在这里回答了类似的广泛问题:http://stackoverflow.com/questions/1946830/multidimensional-variable-size-array-in-c – 2010-05-06 02:13:55

回答

3

是的,这应该很好。

但是......你可能要考虑使用标准集装箱,而不是手动管理内存:

typedef std::vector<int> IntVec; 
typedef std::vector<IntVec> IntGrid; 
IntGrid grid(gridSizeX, IntVec(gridSizeY)); 

grid[0][0] = 20; 
0

是 - 但在C/C++中,它会被布置为电网[Y] [X]。

+0

对不起 - 我的意思是它将在内存中作为网格[y] [ X]。并且同意gf - 在C++中你可能想要使用标准容器,因为你可以检查它们的.size(),并避免任何漏洞。 – nevelis 2010-05-06 01:35:43