C++动态申请列数行数不确定的数组
2015-09-15 19:59
211 查看
今天在学习Sartaj Sahni写的《数据结构、算法与应用》一书中看到自己很喜欢的部分——动态申请行数列数不确定的数组。
在C++中解决的方法其实很简单,我们需要把这个二维数组看成是若干行所组成的结构。什么意思呢?也就是说每一行都是动态的,然后把它们整合在一起不就是二维动态了么?
所以,我们得到了如下的十分给力的设想:
那么,加上一些简单的异常捕获、空间释放,我们就可以得到一个适应性比较好的函数了,请看这段简易的代码:
函数模板确实是个好东西,它可以让我们赶走重复书写那满满的恶意。无论在其它语言中我们应该如何实现行列数不确定的动态的二维数组,我们都可以从这个小例子中获得启发:
复杂的问题经过分解会变得容易处理
模拟或者说自己创造出所需要的数据结构是一种需要持续锻炼的能力
在动态申请之后及时进行delete处理,也就是对回收机制应该不断进行研究。
在C++中解决的方法其实很简单,我们需要把这个二维数组看成是若干行所组成的结构。什么意思呢?也就是说每一行都是动态的,然后把它们整合在一起不就是二维动态了么?
所以,我们得到了如下的十分给力的设想:
那么,加上一些简单的异常捕获、空间释放,我们就可以得到一个适应性比较好的函数了,请看这段简易的代码:
[code]#include<iostream> using namespace std; template <class T> bool make2dArray(T** &x, int numberOfRows, int numberOfColumns) { x = new T*[numberOfRows]; for (int i = 0; i < numberOfRows; i++) { x[i] = new T[numberOfColumns]; } return true; } template <class T> void delete2dArray(T** &x, int numberOfRows) { //删除行数组空间 for (int i = 0; i < numberOfRows; i++) { delete [] x[i]; } //删除行指针 delete[]x; x = NULL; } int main() { try{ int **x; int r; int c; cout << "Please input r "; cin >> r; cout << endl; cout << "Please input c"; cin >> c; cout << endl; make2dArray(x, r, c); delete2dArray(x, r); } catch (bad_alloc) { cerr << "Could not create x" << endl; exit(1); } return 0; }
函数模板确实是个好东西,它可以让我们赶走重复书写那满满的恶意。无论在其它语言中我们应该如何实现行列数不确定的动态的二维数组,我们都可以从这个小例子中获得启发:
复杂的问题经过分解会变得容易处理
模拟或者说自己创造出所需要的数据结构是一种需要持续锻炼的能力
在动态申请之后及时进行delete处理,也就是对回收机制应该不断进行研究。
相关文章推荐
- C++左值和右值
- c++构造函数和析构函数
- 规定C++输出每行不超过多少字数
- 解决eclipse中运行c/c++项目时控制台没输出的问题
- c/c++内存布局
- C语言计算日期间隔天数的经典算法解析
- C++primer学习之:类型别名和auto
- C++里的对齐规则
- C++析构函数为什么要为虚函数
- C语言最重要的知识点
- C++动态分配和撤销内存以及结构体类型作为函数参数
- Ugly Number I II 解析
- c++ 服务端
- 使用C++实现功能下载文件
- 了解typename的双重意义(Effective C++_42)
- C语言——字符串拼接
- Effective C++ 改善程序与设计的55个具体做法 二周目笔记02
- 【C++】合并两个排序的链表,要求合并后仍然是有序的
- 了解隐式接口和编译期的多态(Effective C++_41)
- 使用dlopen和dlsym来使用C++中的类