该怎麽用 new 来分配多维阵列?
2008-03-26 21:45
127 查看
有很多方法,端视你对阵列大小的伸缩性之要求而定。极端一点的情形,如果你在编译期就知道所有阵列的维度,你可以静态地配置(就像 C 一样):
class Fred { /*...*/ };
void manipulateArray()
{
Fred matrix[10][20];
//使用 matrix[i][j]...
//不须特地去释放该阵列
}
另一个极端情况,如果你希望该矩阵的每个小块都能不一样大,你可以在自由记忆体里配置之:
void manipulateArray(unsigned nrows, unsigned ncols[])
//'nrows' 是该阵列之列数。
//所以合法的列数为 (0, nrows-1) 开区间。
//'ncols[r]' 则是 'r' 列的行数 ('r' 值域为 [0..nrows-1])。
{
Fred** matrix = new Fred*[nrows];
for (unsigned r = 0; r < nrows; ++r)
matrix[r] = new Fred[ ncols[r] ];
//使用 matrix[i][j]...
//释放就是配置的反动作:
for (r = nrows; r > 0; --r)
delete [] matrix[r-1];
delete [] matrix;
}
class Fred { /*...*/ };
void manipulateArray()
{
Fred matrix[10][20];
//使用 matrix[i][j]...
//不须特地去释放该阵列
}
另一个极端情况,如果你希望该矩阵的每个小块都能不一样大,你可以在自由记忆体里配置之:
void manipulateArray(unsigned nrows, unsigned ncols[])
//'nrows' 是该阵列之列数。
//所以合法的列数为 (0, nrows-1) 开区间。
//'ncols[r]' 则是 'r' 列的行数 ('r' 值域为 [0..nrows-1])。
{
Fred** matrix = new Fred*[nrows];
for (unsigned r = 0; r < nrows; ++r)
matrix[r] = new Fred[ ncols[r] ];
//使用 matrix[i][j]...
//释放就是配置的反动作:
for (r = nrows; r > 0; --r)
delete [] matrix[r-1];
delete [] matrix;
}
相关文章推荐
- C++:多维数组的动态分配(new)和释放(delete)
- C++:多维数组的动态分配(new)和释放(delete)
- C++:多维数组的动态分配(new)和释放(delete)
- C++:多维数组的动态分配(new)和释放(delete)
- C++:多维数组的动态分配(new)和释放(delete)
- C++:多维数组的动态分配(new)和释放(delete)
- C++笔记之使用new动态分配多维数组
- C与C++中内存分配释放-malloc,free,new,delete
- C++ 内存分配操作符new和delete详解
- 内存分配秘籍:new,malloc,globalAlloc的区别与详解
- 动态内存分配 new,delete
- C++ 用new 动态创建多维数组
- Delphi 内存分配 StrAlloc New(转)
- C++ malloc()、calloc()、realloc()、new[]分配内存方法辨析
- 没有任何类型 Test1 的外层实例可访问。必须用类型 Test1 的外层实例(例如,x.new A(),其中 x 是 Test1 的实例)来限定分配。
- 用new和delete运算符进行动态分配和撤销存储空间
- C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- 创建结构candybar,要求用new来动态分配结构数组
- C++动态内存分配(new/new[]和delete/delete[])详解