轻轻松松学STL指南.docVIP

  • 3
  • 0
  • 约1.11万字
  • 约 18页
  • 2018-07-17 发布于湖北
  • 举报
轻轻松松学 爱华 ? 一个新标准的出现,对于熟习旧环境的工程师而言,总是有近乡情怯之感。明知新标准一定比旧标准来的好,但对于旧标准总是有那么一点依依不舍,对新标准也总是有些许隔阂,虽然几个月后就不这么想了。 C++ STL程式库的出现,对于习惯使用Borland C++等等程式库的工程师而言,也有类似的感觉。有人说:C++就是把C语言那些令人既爱又恨的程式技巧,予以标准化,成为语言的一部份;STL则是把C++那些令人期待盼望的功能,予以公开化,让大家不用花大钱买程式库就可使用!而且使用STL,不必担心日后程式码会有大更动,因为毕竟这是ANSI C++的标准。所以本文将从STL概念上的基本原则出发,带您在复杂的STL程式库中找寻自己的认知天地 如果您对STL起源与基本结构有兴趣,可以参考上期STL的简介,或是到下面这个WWW站参考一下最新资讯,里面有ANSI C++通过的最新STL版本等等资料。/~musser/stl.html STL对编译器要求 每当我们学习一个新的程式库,通常第一个会问的,就是如何在我的编译器上,写一个简单的程式,证明它可以跑。STL对编译器的要求很严格,以最普遍的Borland C++ 4.5为例,Borland C++必须在程式码前加一段:? #define __MINMAX_DEFINED#pragma option -vi-? 才可以跑程式,并且include的路径也要设对。而微软的Visual C++ 4.0因为不支援DOS模式下的程式,如果要简化GUI的处理来使用STL,最简单的方式便是在Console Application模式下写程式,而且include的路径也要设对,如此才可以跑。至于Visual C++2.x版本的编译器,因为template机制做的不好,并不能编译STL程式库。值得注意的是,这里所说的「可以跑程式」,并不代表所有STL的功能都可以使用,因为C++ template机制过于复杂,可以有很多种变化,现今的编译器技术无法正确的实作,所以现在用STL所写的程式,日后或多或少还是需要修改,但已经比以往使用专属程式库改版时,需要做的修改来得少很多。STL的基本概念:Container,Iterator,Algorithm 在学习STL之前,让我们介绍STL最基本的概念,如图一:演算法物件透过Iterator操作各种容器物件,完成运算。而除了基本的演算法由STL内建提供外,工程师可以自己定义一些新的辅助演算法(help function,或称辅助函数),来完成新的计算。这些新的辅助演算法,通常是利用C++的template function的方式设计。您可能会问,依照OO理论对于物件的定义,为什么称STL的演算法物件为「物件」,它其实只是函数而已?答案是:因为C++中的函数名称事实上也是一种型别,利用typedef可将之宣告成指向函数指标的型别,所以当我们以C++中的型别为准,enum、union、struct、typedef等等关键字都可看做是一种类别的变形宣告,也因此可以把单一函数看做是物件(没有资料成员的物件)。 图一左边的容器物件,STL则定义三个最基本也最常用到的的容器物件:vector,deque,list。而其他各种资料结构教科书上定义的特定资料结构,如stack, heap, binary tree等等,都可以再利用这三个基本的容器,加以变化,实作之。基本上,图一左边的物件,STL利用C++的template class制作。? 图一、STL的根本概念? 所以有些人(如[Nel95]书)就把STL的功能分成五大部份,掌管图一从左至右大大小小的事情,如图二: 图二、STL的五个部份[Nel95]? 演算法物件,Iterator物件,容器物件仍在,STL的Adaptor物件包装了由基本容器物件所产生的变形资料结构,如stack,queue,priority_queue等;Function物件则辅助演算法物件完成一些更为基本的运算,如比较大小等。以下,我们将以图一的原则审视STL的各组成部份。Container Container顾名思义,就是一种容器,里头可以装各式各样的物件。如下,template class Tclass container { T d;};? 透过templateclass T,T可表示任意物件所属的类别,于是在容器类别内产生一个T类别的物件d。由于T可以表示各种资料型别,不管是C++内建的基本资料型别或是利用class定义的类别,都可以存入STL的容器物件中。 STL将容器物件分为两种,循序式容器(Sequence Container)与关系式容器(Associate Container)。循序式容器内的每

文档评论(0)

1亿VIP精品文档

相关文档