二維數組的動態分配

一維數組分配比較簡單,在此略過。但是平時經常遇到需要動態分配二維數組的情況。下面給出幾種二維數組分配方式。

注:二維數組行座標、列座標都是通過m,n來傳遞的。

1. 利用一維數組分配方式,模擬二維數組

其實棧上二維數組仍然是個連續的內存空間,只不過在訪問時做了相應的處理。那麼,動態分配時,也可分配一塊連續的內存空間。訪問時通過(d + i m + j )訪問即可。

  1. int m = 6, n = 3;
  2. char *d = (char * )malloc( sizeof( int )* m * n );
  3. for( int i = 0; i<m; ++i ){
  4. for ( int j = 0; j<n; ++j )
  5. {
  6. *(d + i*m + n ) = i + j;
  7. cout << static_cast<int>( *(d + i*m + n ) ) << "\t";
  8. }
  9. cout << endl;
  10. }

2. 利用STL vector實現動態二維數組

STL中vector是基於固定長度數組的延伸,那麼利用這種方法也可以得到動態二維數組。具體方法見代碼。

  1. int m = 6, n = 3;
  2. vector< vector<int> > d( m, vector<int>( n, 0 ));
  3. for( int i = 0; i<m; ++i ){
  4. for ( int j = 0; j<n; ++j )
  5. {
  6. d[i][j] = i + j;
  7. cout << static_cast<int>( d[i][j] ) << "\t";
  8. }
  9. cout << endl;
  10. }

3. 層層遞進分配法

此方法參考了:http://blog.csdn.net/walle_love_eva/article/details/8934397
直接複製代碼:

  1. char** allocateCharacterBoard(size_t xDimension, size_t yDimension)
  2. {
  3. char** myArray = new char*[xDimension]; // Allocate first dimension
  4. for (size_t i = 0; i < xDimension; i++)
  5. {
  6. myArray[i] = new char[yDimension]; // Allocate ith subarray
  7. }
  8. return myArray;
  9. }
  10. void releaseCharacterBoard(char** myArray, size_t xDimension)
  11. {
  12. for (size_t i = 0; i < xDimension; i++)
  13. {
  14. delete [] myArray[i]; // Delete ith subarray
  15. }
  16. delete [] myArray; // Delete first dimension
  17. }

上面總結的三種方法是我現在覺得比較好的方法,如果你有更好的方法,歡迎留言討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章