二维数组的动态分配,可扩充成多维数组
来源:互联网 发布:马丽 知乎 编辑:程序博客网 时间:2024/05/05 22:00
其实大部分还是引用的http://blog.csdn.net/morewindows/article/details/7664479这篇文章上面的第二部分
不过分配内存,使用了c++对应的new,和windows下面的HeapAlloc
原理其实就是下面的一个图:
确实就如该文章所说,还少一个对应二维string数组的情况。
但目前没有需要用到,用的是和再回来看看。
很多情况下都是用的Verctor,不过一般的面试笔试题还是用的数组结构较多
以下代码,通过g++ 4.7.2版本和vs2012、2010编译成功
// test2.cpp : 定义控制台应用程序的入口点。////#include "stdafx.h"#include "stdio.h"#include "iostream"//#include "MemCheck.h" // Must appear last!#include "string.h"#ifdef _WIN32#include "windows.h"#endif///////////////////////////////////////////////////////////////////////////************************************************************************//*如果使用一位数组代替二维数组,是个不错的选择比如下面的代码:T *arr=new T[col*rol];arr(col*i+j)=k //代替arr[i][j]=k,delete[] arr;*//************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////函数:MallocArray2D(int row, int col)////目的:分配和释放二维十足////注释:参数:二维数组行和列的个数/////////////////////////////////////////////////////////////////////#ifdef _WIN32HANDLE hHeap;#endiftemplate<typename T>T** NewArray2D(int row, int col){int size = sizeof(T);int point_size = sizeof(T *);// 先申请内存,其中point_size * row表示存放row个行指针#ifdef _WIN32hHeap = ::HeapCreate(HEAP_NO_SERIALIZE, 0, 0);T **array = (T **)(::HeapAlloc(hHeap, HEAP_NO_SERIALIZE, 4096 ));#elseT **array = new T * [point_size * row + size * row * col];#endifif (array != NULL){memset(array, 0, point_size * row + size * row * col);T *head = (T *)((long)array + point_size * row);while (row--){array[row] = (T *)((long)head + row * col * size);}}return (T **)array;}void DelArray2D(void **array){if (array != NULL){#ifdef _WIN32if (hHeap){::HeapFree(hHeap, HEAP_NO_SERIALIZE, array);}#elsedelete array;#endif}}int main(){//TRACE_OFF();//MEM_ON();std::cout << "动态申请二维数组" << std::endl;std::cout << "请输入行列(以空格分开): " << std::endl;int row, col;std::cin >> row;std::cin >> col;//动态申请连续的二维数组 int **p = NewArray2D<int>(row, col);// 为二维数组赋值int i, j;for (i = 0; i < row; i++){for (j = 0; j < col; j++){p[i][j] = i + j;}}// 输出二维数组for (i = 0; i < row; i++){for (j = 0; j < col; j++){std::cout << p[i][j] << " ";}std::cout << std::endl;}DelArray2D((void **)p);//MEM_OFF();return 0;}
- 二维数组的动态分配,可扩充成多维数组
- 多维数组的动态分配
- 多维数组的动态分配
- 二维数组的动态分配
- 二维数组的动态分配
- 二维数组的动态分配
- 二维数组的动态分配
- C++ 二维数组/多维数组的动态分配(new)和释放(delete)
- 如何动态分配多维数组
- 动态分配多维数组
- 动态分配多维数组
- 动态分配多维数组
- 动态分配多维数组
- 多维数组动态分配内存空间
- C++二维数组的动态分配
- 动态分配二维数组的实现
- 有关二维数组的动态分配
- C++二维数组的动态分配
- 信息系统开发与管理
- VC++动态链接库(DLL)编程深入浅出(zz)
- Linux时间校正
- HDU 4745 Two Rabbits
- 怎样准备软件工程师的面试
- 二维数组的动态分配,可扩充成多维数组
- 题目1509:树中两个结点的最低公共祖先
- 题目1018:统计同成绩学生人数
- 学会16件事情
- 一个整数分解为连续正整数之和
- 树与二叉树
- 题目1022:游船出租
- oracle virtualbox----Failed to load VMMR0.r0 (VERR_NO_MEMORY).
- 初探JDK6 javax.script (javascript解析)