16.LabVIEW 中的泛型容器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LabVIEW 中的泛型容器   Google 网站里有个 Google 实验室,有不少 Google 的产品最初就是放在这个实验室里的。现在 NI 也有 NI 实验室了。NI 实验室公布出来的项目一般是 NI 工程师利用额外时间做的一些调查研究。这些项目不是公司的正式产品,但是它们的设计很有创新或者是比较有应用潜力。与其让这些项目被埋没了,不如先看看用户对这些项目的反应,如果相当一部分用户觉得某个项目非常有帮助,或许它就值得我们为其增加投资,把它作成正式产品了。   我这里给大家介绍其中的一个项目:“LabVIEW Generic Container Map”。因为这个项目是我设计的,所以对它了解比较多一些。当时,我们打算提出这个项目的时候,主要有两个目的:第一是帮助用户编写有复杂数据结构的应用程序;第二是推进 LabVIEW 向通用编程语言方向做改进。   C++ 的程序员基本都很喜欢 STL 这个模板库。程序中常会使用数组、队列、字符串等等数据类型和结构,如果自己设计实现这些数据结构和相关的操作,是相当耗费精力的。好在 STL 实现了这些数据结构,和它们常用的操作方法。借用 STL 提供的功能,编程时很多细节方面不需要再去考虑了,这就让工作简化了许多。尝到 STL 甜头的程序员,在编写程序的时候,已经很难离开 STL 了。   STL 中非常重要的一个部分就是容器。容器用于存放数据,程序通过调用容器的结构函数保存数据到容器或者访问容器中的数据。容器也分为不同的类型,如链表、队列等。它们在数据的组织方式上,或存取方式上有所分别,以适用不同的需求。STL 中的容器和方法都是泛型的或者说是数据类型无关的,就是说这些容器可以保存和操作任何类型的数据。   其它一些常用的编程语言,如 Java、C# 也都有类似的泛型容器以方便程序员使用。   LabVIEW 的主要方针是简化工程师们编写程序的难度,以前用 LabVIEW 编写的程序大多是工业领域流程控制类型的。这种类型的程序用不到太复杂的数据结构和算法,因此,LabVIEW 中对我们在计算机课程中学到的那些经典数据结构以及算法的支持并不多。   但是在我自己用 LabVIEW 多了之后,用它比用 C++ 要顺手,任何类型的程序都喜欢使用 LabVIEW 来编写,包括一些通常用途的程序。这时候,LabVIEW 缺乏对基本数据类型支持的缺点就格外突出了。于是我和周围几个同事就想到应该在这些方面对 LabVIEW 做一些补充,做一些比较规范的泛型容器和算法,一方面方便自己,也许还可以提供给别的用户。   由于这不是正式项目,我们能投入的资源很有限,不可能一开始就做得很全面。作为开始,我们选择了 Map 容器和它最常用的几个方法。首先选择 Map 一是因为它比较常用,二是其它容器中,有些在概念上和 LabVIEW 中已有的一些函数比较接近,如果选则他们,可能会引起用户的误解。   LabVIEW 中的 Array 操作与 STL 中的 vector 是非常相似的,功能齐全,不需要考虑底层操作如内存管理等。STL 中的 deque, queue, stack 等,与 LabVIEW 中的“队列”(Queue)操作比较类似。但是 LabVIEW 中的队列存在的目的不是为了作容器,而是用于在多线程程序中通讯。在“生产者/消费者”程序模式中,经常使用队列在不同的线程中传递数据或消息。因为 LabVIEW 中队列操作主要用于不同线程间的通讯,因此它的函数并没有采用 LabVIEW 的主要传参方式-传数据,而是采用了传引用的方式。   我们实现的这个 Map(这个按字面翻译比较别扭,中文可能翻译成“字典”还比较合理)泛型容器功能与 C++ STL 中的 Map 是类似的,它主要用于程序经常需要按某一关键字查询数据的情况。   Map 已经包括了编写查询程序时常用的操作,比如把数据放到容器中、查找一个数据、删除、清空容器等。   我们的 LabVIEW Generic Container Map 内部的数据是按照平衡二叉树的方式组织存储的,它的查询复杂度比一般线性数据结构的要低。这样,在数据量很大的情况下,使用 Map 的程序效率明显高于使用数组的程序。   Map 采用的是符合 LabVIEW 风格的传数据方式,把整个 Map 中的数据在不同函数间传递。   C++ 是支持泛型编程的。简单地说,泛型编程可以这样理解,就是程序员可以实现一个方法,这个方法能够应用在任何合法的数据类型上。比如,前面提到的 STL,它有个“比较”方法,你可以用它来比较整数,也可以比较字符串,或者使用户定义的类的实例等等。   支持泛型编程,程序员就可抽象出与数据类型无关的算法,从而使代码具有更好的可重用性。   目前,用户

文档评论(0)

ww90055 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档