文档介绍:附录标准模板库( )
标准模板库( , )是美国国家标准化组织和
国际标准化组织于年制定的标准,其最主要与最常用的两部分为容器类
( )以及算法库( )。
概述
首先回想一下第五章所介绍的自定义函数和标准库函数的系统实现方式与
方法以及用户程序中如何对这两种函数来进行使用:
)程序中可直接使用(调用)系统预定义的标准库函数(如, , 等),
但要求在调用前使用编译预处理指令将对应的头文件包含进来。
)用户自定义函数与系统预定义的标准库函数的不同点在于,自定义函数
的函数名、参数个数、函数返回值类型以及函数所完成的功能等都完全由用户程
序来规定(指定);而系统预定义的标准库函数则是一切都事先预定义好的,相
当于是一个软件组件。
与自定义函数和标准库函数两者的关系及其使用方式相类似, 不但允许
通过用户程序来自定义模板(第九章内容),而且还提供了标准模板库(把最常
用的一大批模板及其对它们进行处理的“算法”都定制为标准组件而包含在其
中),从而可节省用户的编程与调试时间,提高软件产品的使用安全性以及整体
效率。使用方式和方法基本上与函数相类似:
)程序中可直接使用(调用)系统预定义的标准模板库中的各模板类(如,
、等标准模板类),但要求在调用前使用编译预处理指令将
对应的头文件包含进来(如通过使用“”等)。
)用户自定义模板与标准库中系统预定义模板的不同点在于,自定义模板
的模板名、模板参数个数、模板所完成的功能以及其中的每一成员函数等都完全
由用户程序来规定(指定);而系统预定义的各模板则是一切都事先预定义好的,
相当于是一个软件组件。
本附录只对最常用的容器类以及算法库进行简单介绍,以使读者对标准模板
库的使用方法与技术有一个大致的了解,期望能起到抛砖引玉的作用,至于更细
致的部分,可参看系统提供的有关文档资料与使用说明。
容器类是一批相关的标准类模板的总称,其中所包含的最基本的个标准类
模板是:(向量)、(列表)、(双端队列)、(映像)、
(多重映像)、(集合),以及(多重集合)。另外,在这些容器类
上作一些扩充(或改造)后,系统又提供了如下另一些也经常使用的标准类模板:
(队列)、(栈)、(优先级队列)等(注:某些不同
的编译器可能还会提供更多的其他标准类模板)。
如同其名字,容器实质上就是用来装载物品的储存器。容器也正是用来
存放各种类型的具体对象的。上述所列容器(类模板)中,除了、、
和之外,其他的容器均为顺序容器,即是说,在其中存储的对象
均是有序的,用户可以在指定位置插入或存取对象;而与集合以及映像有关的那
个类模板则属于非顺序容器,它们并不具有顺序容器的特征。
372
算法库中则包括了各种基本算法,如,,,, 等。
通过使用算法,可对容器中的对象进行诸如查找、排序、拷贝、置换等各种不同
的操作。标准算法库中共提供了多达数十种的不同算法,而这些算法主要通
过一种称为迭代子( )也有称为游标的面向对象的泛型指针来操作(遍
历容器中的不同对象),以达到对各对象进行处理的目的。
下面通过两个实例来叙述对容器类以及对算法库的基本使用方法与技术。
(为一种容器类)的使用
#include <iostream> //不同于<>,见两个例子之后的说明
#include <vector> //由于要使用标准类模板 vector
using namespace std; //使用名字空间 std
void main(){
int a[10]; //int 型数组 a
for (int i=0; i<10; i++)
a[i]=i;
int* ip=a; //ip 为指针,指向 int 型数据
while (ip!=a+10)
cout<<*ip++<<" ";
cout<<endl;
vector<int> v(10); //使用实参类型 int 来实例化标准类模板 vector
//并说明类对象 v,且分配大小为 10 的空间
cout<<"="<<()<<endl; //显示出 v 的大小,size 为类成员函数
for (i=0; i<10; i++)
v[i]=i; //通过下标方式访问容器 v 的元素
vector<int>::iterator itr=(); //itr“指针”指向容器中的首元
while (itr!=()) //end 返回一指针,指向末元(之下一