1
第二章 STL 简介
1. STL 是什么
作为一个 C++程序设计者,STL 是一种不可忽视的技术。
Standard Template Library (STL):标准模板库,更准确的说是 C++ 程序设计语言标准模
板库。STL 是所有 C++编译器和所有操作系统平台都支持的一种库,说它是一种库是因为,
虽然 STL 是一种标准,也就是说对所有的编译器来说,提供给 C++程序设计者的接口都是
一样的。也就是说同一段 STL 代码在不同编译器和操作系统平台上运行的结果都是相同的,
但是底层实现可以是不同的。 令人兴奋的是,STL 的使用者并不需要了解它的底层实现。
试想一下,如果我们有一把能打开所有锁的钥匙,那将是多么令人疯狂啊。
STL 的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成
的组件。STL 现在是 C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。
2. 为什么我们需要学习 STL
STL 是 C++的 ANSI/ISO 标准的一部分,可以用于所有 C++语言编译器和所有平台
(Windows/Unix/Linux..)。STL 的同一版本在任意硬件配置下都是可用的;
STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法
了,这些都已经是 STL 的一部分了。嘎嘎,有意思吧。
使用 STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为
STL 设计者们已经为我们考虑好了。
使用 STL 编写的代码更容易修改和阅读,这是当然的啦。因为代码更短了,很多基础
工作代码已经被组件化了;
使用简单,虽然内部实现很复杂。
虽然,STL 的优点甚多,但是 STL 的语法实在令初学者人头疼,许多人望而却步。可
是 STL 是每个 C++程序设计者迟早都要啃的一块骨头。
2
3. 初识 STL
下面让我们来看几段代码吧:
!
""""!##$%
&!
好懂吧,除了那个 std 有点让人不舒服以外,这是一段普通的没有使用 STL 的 C++代
码。
再看下面一段:
""!
'%()*!
'%()*!
'%()*!
'%()*!
'%()*!
+&!',!--
""""!
&!
如果你真的没有接触过 STL 的话,你会问,呀, 是啥呀?这是一段纯种的
3
STL 代码,看到尖括号了吧,知道那是模板了吧。看到 '%()*、',你不感
觉奇怪么?可是我们并没有定义这些函数啊。
"".!
.'%()*&!
.'%()*!
.'%()*!
""!
+&!!--
'%()*!
""""'/-!
'!
'.'/.'!
'/-!
'0!
'/-!
'!
'/-!
'-!
'!
&!
这一段你又看到了新东西了吧:、、、。不罗嗦了,等你
看完这篇文章,回头再看就简单了。
关于模板的其他细节,读者可以参阅《C++ Templates 中文版》在这里,简单的介绍一
下模板类和函数模板的概念。
4
模板是 C++中实现代码重用机制的一种工具,可以实现类型参数化,把类型定义为参
数。函数模板和类模板允许用户构造模板函数和模板类。
图 1
下面我们来看一段函数模板的例子:
/
/%!
##定义函数模板
%1##%是关键字,1表示一种待实例化的类型
##%2%1也是对的
134511##函数模板,函数名为 6,此函数有 个 1 类型的参数,返回类型为 1
7"!
##在此例实例化的时候,1 可以是多种类型的,(/8
629!
6:'2'9!
;把 1 实例化为 ";34562!##实例化函数模板,把 1 实例化为
;把 1 实例化为 ";34562!##把 1 实例化为
5
- 1
- 2
- 3
- 4
- 5
- 6
前往页