实现真正意义上的二维动态数组模板
http://tech.ddvip.com 2007年03月16日 社区交流
本文详细介绍实现真正意义上的二维动态数组模板
我们可以通过动态数组的反例来确定动态数组应该具有哪些特性。大家都知道以下的方式是定义一个静态数组。
int iCount[10];
int iCount[10][10];从上面可以看出,定义了静态数组之后,无论程序如果使这个数组,该数组在内存中所占空间的大小,位置是确定不变的。
我们可以得出结论,对于编译器,静态数组的大小和空间是已知的,因此编译器可以自动为该数组分配空间。具体情况是:如果你定义了一个全局数组,编译器将在数据区为你的数组分配一个空间;如果是个局部数组(比如定义在某一个局数中),编译器为你的数组分配一个栈(Stack)空间。
从静态数组的讨论中我们得出动态数组应具有的特性:在程序的运行中,动态数组是大小应该是可变的。因些动态组数的实现应该是基于动态的分配内存基础上。下面看这个例子:
假设我们建立一个工厂工人的数据库,数据库中有多个表各代表不同的车间。每个表中保存该车间职工的信息,为了代码简单,可以只让数据库保存职工的姓名。
下面是一个InputWorkers函数,以车间为单位输入全车间职工姓名,然后一次性将这些数据存入数据库中。
void InputWorkers()
{
int iCountOfWorkers, int iNo;
……
用户输入获得车间的人数和车间号
……
string* iArray = new string[iCountOfWorkers];
……
用户输入车间所有职工的信息,并存在iArray数组中
……
StoreInDatabase(iArray, iNo ); //存入数据库
delete [] iArray;
}在程序中iArray是个string指针,并不是数组。但是数组的原理和指针是一样的,比如p[1]是指数组p中的第二个元素,但在实际寻址中是以p+1进行的。所以我们可以这样使用iArray[1]。InputWorkers中的iArray根据车间的总人数来分配不同大小的空间。从这种意义上,可以认为iArray实现了动态数组的功能。
作者:zyq654321 责编:豆豆技术应用
正在加载评论...