二维数组的动态分配
来源:互联网 发布:在线教育网络兼职 编辑:程序博客网 时间:2024/05/17 08:14
一维数组分配比较简单,在此略过。但是平时经常遇到需要动态分配二维数组的情况。下面给出几种二维数组分配方式。
注:二维数组行坐标、列坐标都是通过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
}
上面总结的三种方法是我现在觉得比较好的方法,如果你有更好的方法,欢迎留言讨论。
0 0
- 二维数组的动态分配
- 二维数组的动态分配
- 二维数组的动态分配
- 二维数组的动态分配
- C++二维数组的动态分配
- 动态分配二维数组的实现
- 有关二维数组的动态分配
- C++二维数组的动态分配
- 探索二维数组的动态分配
- 动态分配二维数组的若干方法
- C++中动态分配二维数组的方法
- 关于二维数组的动态分配空间
- 二维数组的动态分配和删除
- 二维数组的动态分配和删除(转载)
- C++中二维数组的动态分配
- 二维数组的动态分配及参数传递
- C++中二维数组的动态分配
- 也谈谈二维数组的动态分配
- iOS沙盒机制
- 袁晖:C2B汽车电商模式创新
- SSO(单点登录)实施中遇到的几个问题
- Windows 8下共享文件夹
- RDS各数据库优化的解决方案
- 二维数组的动态分配
- Python 字符串操作
- linux快捷键(上)
- Android 动画深入解析
- 数字电路设计之移位器设计2
- replace和replaceAll 用法详解
- CentOS/Linux使用MOXA模块
- CAGradientLayer的一些属性解析 - 游贤明
- cfg80211的kernel架构(基于Linux 3.08)之sta