一、STL简介
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander
Stepanov、Meng Lee和David R
Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采
用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文
件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>
和<utility>。以下笔者就简单介绍一下STL各个部分的主要特点。
二、算法
大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的
情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时
候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参
数中使用一种类型替换掉同一种类中的其他类型。
STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以
你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所
需要的功能并大大地提升效率。
算法部分主要由头文件<algorithm>,<numeric>和<functional>组
成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上
都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很
小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类,
用以声明函数对象。
三、容器
在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显
得更加重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在
细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对
最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。
容器部分主要由头文
件<vector>,<list>,<deque>,<set>,<map>,<stack>
和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关
系。
数据结构 描述 实现头文件
向量(vector) 连续存储的元素 <vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素 <list>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>
集合(set)
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的执的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>
四、迭代器
下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可
以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几
乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组
成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器
使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生
的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。
分享到:
相关推荐
C++的STL简介 C++的STL(Standard Template Library)是C++程序设计语言标准模板库,作为一个C++程序设计者,STL是不可忽视的技术。STL提供了大量的可复用软件组织,例如排序、搜索算法等,程序员再也不用自己设计...
### STL简介与List详解 #### 一、STL概述 STL(Standard Template Library,标准模板库)是C++语言中的一个重要组成部分,它为开发者提供了一系列高效的数据结构和算法,极大地提高了开发效率并减少了错误的发生。...
### STL简介:标准模板库详解 #### 一、引言 随着C++的发展与演进,程序员们逐渐意识到了重复造轮子的问题所在。在实际的软件开发过程中,经常会遇到需要实现基本数据结构如栈、队列、链表等的需求。为了解决这一...
### STL简介(入门级) #### 一、STL概述 STL(Standard Template Library,标准模板库)是一种高效且功能强大的编程工具集,最初由Alexander Stepanov、Meng Lee和David RMusser等人在惠普实验室开发。尽管STL...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了一系列高效、可重用的数据结构和算法。STL的核心概念包括容器、迭代器、算法和函数对象,这些组件的设计旨在提高代码的...
#### 一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件组件,最初由Alexander Stepanov、Meng Lee 和 David R. Musser 在惠普实验室工作期间开发。虽然STL现在主要与C++语言...
STL,全称为Standard Template Library,是C++编程语言中的一种重要库,它提供了一系列高效且灵活的容器、算法和迭代器,旨在帮助开发者构建更高效、可维护的代码。STL的核心理念是通过模板机制实现泛型编程,使得...
stl入门相关文档,写的非常好,当然它并不是stl的相关教材,只是适用那些想学stl,但又对stl不甚了解的人,能够让读者对stl有一个大体的认识。
STL简介,简要介绍了C++语言的一个重要组成部分-标准模板库(STL),对于深入学习C++有启发作用
STL(Standard Template Library)是C++编程语言中的一个重要组成部分,它是一组预先编写好的高效容器、迭代器、算法和函数对象(也称为仿函数)的集合。这些组件都以模板的形式存在,允许开发者使用多种数据类型。...
STL(Standard Template Library,标准模板库)是C++编程中的一个重要组成部分,它为程序员提供了大量预先编写好的高效数据结构和算法,使得开发者能够更加专注于解决问题的逻辑,而不是重复实现基础的数据操作。STL...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了一组高效、可重用的数据结构和算法,极大地提升了C++程序员的生产力。STL的核心概念包括算法、容器和迭代器。 1. **算法...
泛型程序设计是继面向对象程序设计之后的又一种程序设计方法。 泛型程序设计就是让程序写得通用,能够适用于各种数据类型与数据结构,并且并不损失程序效率。面向对象与泛型程序设计这两种程序设计方法并不矛盾,...
STL 简介 STL 是 C++ 语言标准中的重要组成部分,提供了各种数据结构和算法的精巧实现。STL 大致可以分为三大类:算法(algorithm)、容器(container)、迭代器(iterator)。STL 容器是一些模板类,提供了多种...
#### 一、STL简介与背景 - **标准模板库(Standard Template Library, STL)**是C++的一个关键组成部分,它提供了一组通用算法以及容器类来帮助开发者高效地进行软件开发。STL的引入极大地简化了C++的编程模型,使得...
C++ STL,全称Standard Template Library,是C++标准库的一部分,它提供了一组高效的工具,包括容器、迭代器、算法、函数对象、适配器和内存分配器,旨在简化和加速程序设计。这些组件相互协作,使得程序员能够以一...
- "STL 简介,标准模板库.htm":这个文件可能是对STL的基本介绍,涵盖了STL的基本概念、主要组件和使用方法。 - "STL_A.pdf" 和 "STL_B.pdf":可能包含更深入的STL主题,如容器的实现细节、迭代器的工作原理或特定...
本篇文章将详细解读标题“STL相关资料:Effective STL”及描述中涉及的三个文档——《Effective STL》、《STL快速入门》和《STL简介》,帮助你深入理解STL的核心概念和最佳实践。 首先,《Effective STL》是Scott ...