一維數組分配比較簡單,在此略過。但是平時經常遇到需要動態分配二維數組的情況。下面給出幾種二維數組分配方式。
注:二維數組行座標、列座標都是通過m,n來傳遞的。
1. 利用一維數組分配方式,模擬二維數組
其實棧上二維數組仍然是個連續的內存空間,只不過在訪問時做了相應的處理。那麼,動態分配時,也可分配一塊連續的內存空間。訪問時通過(d + i m + j )訪問即可。
int m = 6, n = 3;
char *d = (char * )malloc( sizeof( int )* m * n );
for( int i = 0; i<m; ++i ){
for ( int j = 0; j<n; ++j )
{
*(d + i*m + n ) = i + j;
cout << static_cast<int>( *(d + i*m + n ) ) << "\t";
}
cout << endl;
}
2. 利用STL vector實現動態二維數組
STL中vector是基於固定長度數組的延伸,那麼利用這種方法也可以得到動態二維數組。具體方法見代碼。
int m = 6, n = 3;
vector< vector<int> > d( m, vector<int>( n, 0 ));
for( int i = 0; i<m; ++i ){
for ( int j = 0; j<n; ++j )
{
d[i][j] = i + j;
cout << static_cast<int>( d[i][j] ) << "\t";
}
cout << endl;
}
3. 層層遞進分配法
此方法參考了:http://blog.csdn.net/walle_love_eva/article/details/8934397
直接複製代碼:
char** allocateCharacterBoard(size_t xDimension, size_t yDimension)
{
char** myArray = new char*[xDimension]; // Allocate first dimension
for (size_t i = 0; i < xDimension; i++)
{
myArray[i] = new char[yDimension]; // Allocate ith subarray
}
return myArray;
}
void releaseCharacterBoard(char** myArray, size_t xDimension)
{
for (size_t i = 0; i < xDimension; i++)
{
delete [] myArray[i]; // Delete ith subarray
}
delete [] myArray; // Delete first dimension
}
上面總結的三種方法是我現在覺得比較好的方法,如果你有更好的方法,歡迎留言討論。