当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>实现真正意义上的二维动态数组模板</b>[VC/C++编程]

赞助商链接



  本文“<b>实现真正意义上的二维动态数组模板</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

我们可以通过动态数组的反例来肯定动态数组应当具有哪些特点.大家都知道以下的方法是定义一个静态数组.

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实现了动态数组的功效.

假如iArray定义为一个静态数组,那么iArray的大小是固定的,因此我们必须预计车间人数的一个上限.

string iArray[100];

静态数组的速度是快于动态数组.因为从理论上,栈在速度上是快于堆的.但是我们假如断定利用动态数组在是因为节俭空间的考虑.别的要注意静态数组上限改变带来的本钱.我们必须重新设定上限以办理这个bug,然后重新编译程序.假如你能掌握程序的编译,这没问题.但是,你要做是的为每一个用户更新程序.没有更新的用户便可以碰到这个bug.想到这一点,你就欢愉不起来.

你大概会说,我设一下大一点的上限,超越它的大概性会非常小,并且内存的浪费也不会多大.比方最多一个车间200人,最少一个车间100人,那也只浪费了100空间.目前机械的内存根本不在乎这么一个空间浪费.是的,你可以这么做,但是请持续向下谈论.

目前我们要将全部职工的姓名存入一个二维数组,数组的每一行表示一个车间,每行中的元素是职工的姓名.想想看,假如用静态数组,你会浪费多空间.并且你还要为车间数加一个上限.这个例子并不好,因为工厂中的车间数应当是可以肯定的.但是我可以换个角度说,我只要某几个车间,也大概是全部车间,那么你能否还保持呢?

说了上面这些,只是极少的谈论了一下动态数组大概是利用情形.实际中,特别是大型软件系统中动态数组的利用其实很广泛.并且在C++的各种库中也有数组的实现的类,通过调用呼应的类函数便可以对数组中的元素实现增/删.并且也可以通过嵌套实现二维的动态.这些类或类模板利用起来很简单.比方:

CAtlArray<int> iArray;
iArray[0] = 1; // 出错,iArray中并没有元素
iArray.Add(1);  // element 2
iArray[0] = 1; // 可以,iArray中并有1个元素
iArray[0] = 1; // 出错,iArray中并只有1个元素


  以上是“<b>实现真正意义上的二维动态数组模板</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .