1 / 22
文档名称:

三十分钟掌握STL.pdf.pdf

格式:pdf   页数:22页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

三十分钟掌握STL.pdf.pdf

上传人:lxydx 2015/11/12 文件大小:0 KB

下载得到文件列表

三十分钟掌握STL.pdf.pdf

文档介绍

文档介绍:12-10-5 三十分钟掌握STL
三十分钟掌握STL
这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了
两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得
有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。
译者:kary
contact:karymay@
STL概述
STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确
实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作
几乎任何数据集合,包括链表,容器和数组。
要点
STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以后接一对圆括
弧的方式表示,例如sort()。
STL另一个重要特性是它不是面向对象的。为了具有足够通用性,STL主要依赖于模板而
不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类
继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另
外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效。
提示
确保在编译使用了STL的程序中至少要使用-O优化来保证内联扩展。STL提供了大量的模
板类和函数,可以在OOP和常规编程中使用。所有的STL的大约50个算法都是完全通用的,
而且不依赖于任何特定的数据类型。下面的小节说明了三个基本的STL组件:
1) 迭代器提供了访问容器中对象的方法。例如,可以使用一对迭代器指
定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的
指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他
类似于指针的操作符地方法的类对象。
2) 容器是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为
了访问容器中的数据,可以使用由容器类输出的迭代器。
3) 算法是用来操作容器中的数据的模板函数。例如,STL用sort()来对一
个vector中的数据进行排序,用find()来搜索一个list中的对象。函数本身与他
们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的
任何数据结构上使用。
头文件
为了避免和其他头文件冲突, 。为了包含标准
的string类,迭代器和算法,用下面的指示符:
#include <string>
#include <iterator>
./~yhf/ 1/22
12-10-5 三十分钟掌握STL
#include <algorithm>
如果你查看STL的头文件,。
由于这些名字在各种STL实现之间都可能不同,你应该避免使用这些名字来引用这些头文
件。为了确保可移植性,。表1列出了最常使用的各种容器
类的头文件。该表并不完整,对于其他头文件,我将在本章和后面的两章中介绍。
表 1. STL头文件和容器类
#include Container Class
<deque> deque
<list> list
<map> map, multimap
<queue> queue, priority_queue
<set> set, multiset
<stack> stack
<vector> vector, vector<bool>
名字空间
你的编译器可能不能识别名字空间。名字空间就好像一个信封,将标志符封装在另一个
名字中。标志符只在名字空间中存在,因而避免了和其他标志符冲突。例如,可能有其他
库和程序模块定义了sort()函数,为了避免和STL地sort()算法冲突,STL的sort()以及其
他标志符都封装在名字空间std中。STL的sort()算法编译为std::sort(),从而避免了名字
冲突。
尽管你的编译器可能没有实现名字空间,你仍然可以使用他们。为了使用STL,可以将
下面的指示符插入到你的源代码文件中,典型地是在所有的#include指示符的后面:
using namespace std;
迭代器
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指
针。事实上,C++的指针也是一种迭代器。但是,迭代器