当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

C++BUILDER中几种容器的使用

++BUILDER是Borland公司基于C++的快速开发工具,它简单的使用方法和强大的功能一直深受很多编程人员的好评。C++BUILDER(以下简称BCB)的组件库跟DELPHI一样,都是VCL。跟微软的MFC不同,VCL完全是用Object Pascal语言编的。也因此,使BCB同时获得了Pascal和C++的强大功能。

介绍在BCB中实现控件数组的文章不少,但是实现方法上,大多用VCL自带的Tlist类实现。实际上,除了这种方法,在BCB中实现控件数组还是有不少其他方法的。这里,我就谈谈这几种实现控件数组的方法,实际上,也是对BCB中常用的容器做一个小结。

BCB完全支持VCL和标准C++,这就导致了存在有VCL版本和标准C++两个版本的容器。在这里,我会给出三种实现方法,一种是VCL的TList方法,一种是VCL的DynamicArray(动态数组)方法,还有一种就是标准C++的STL实现方法。相信这些基本已经涵盖了BCB中常用的几种容器类型。

我设计了一个例子来演示我说的容器以及它们的使用方法。

首先先让我介绍一下我的例程。很简单却很有代表性的一个小程序,下面是它的界面:

 

  你可以看到,在这个例程里,我们管理了一组TImage控件(就是那里面的“山”图标),我们可以往我们这堆“山”里随意添加新的“山”(会以随机的形式在Panel中出现),我们还可以删除任意一个我们不想要的“山”。同时,我还提供了“全部清除”,可以用遍历的方式全部清除所有的“山”。我要讲的这三个容器的都是以这个程序作为例程,外表上唯一的不同就是这个窗体的标题会因例而异。

我就先说说大家用的最多的Tlist类。

VCL提供的Tlist类实现了可以动态存储的线形链表对象。它实际上是以存储指针(链式存储)的方式实现的,但它同时提供了顺序存储的查找方式。可以通过Items属性像访问一个数组那样访问Tlist对象的每一项。除此之外,Tlist类提供方便全面的链表功能。例如,全套插入删除查找排序的对象方法以及包含Count属性访问链表中项目的个数。

概念说完了,我们就来看看我这个TList版本的“今天能看见山”是怎么实现的。窗体是再简单不过了,无非是一个Form,一个Panel,一个ListBox,三个Button而已。这几个控件的简单堆砌我就不在赘述了。

TList是一个容器,但是它本身也是一个类,因此我们在使用之前也得先创建这个类。为了简单起见,我把这个TList类的指针定义成了一个私有指针以便这个类中的所有函数都能方便地访问到它。因此我在头文件的Private段里有如下定义:

TList *HillList;

接下来我们再定义三个私有函数用来响应三个不同的按键。于是我的Private段中又多了这样一些东西:

void __fastcall AddHill();

void __fastcall DeleteHill();

void __fastcall ClearAll();

好了,现在我们该来关系函数的具体实现了。首先,我得让我的容器创建起来,于是我在窗体的构造函数中执行了:

HillList = new TList();

HillList记载了指向这个容器的指针。下面我给出函数实现的原代码并在其中加以说明。

/**往控件数组中增加成员**/

void __fastcall TfrmHill::AddHill()

{

TImage *temImage;                  //定义临时TImage指针

HillList->Add(new TImage(this));       //构造新Image对象并把它加入控件数组内

HillListBox->Items->Add(\"A Hill\");     //向ListBox中写入“A Hill”

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接