什么是STL
STL就是StandardTemplateLibrary,标准模板库。STL是泛型编程的实例,用到的技术就是类模板和函数模板。STL的一个重要特点是数据结构和算法的分离。
模板:所谓模板是一种使用无类型参数来产生一系列函数或类的机制。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个独立的类或函数。
STL简介
STL的代码从广义上讲分为3类:algorithm(算法)、container(容器)和iterator(迭代器)。几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用几乎。在C++标准中,STL由13个头文件组成,如<list>
STL的代码从广义上讲分为三类(共13个头文件)
算法(algorithm)3个头文件
|
algorithm,numeric,functional
|
容器(container)7个头文件
|
vector,list,deque,stack,set(set,multiset),map(map,multimap),queue(queue,priority_queue)共10个数据结构
|
迭代器(iterator)3个头文件
|
iterator,memory,utility
|
算法
算法是用来操作容器中的数据的模版函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。函数本身与他们操作的数据的结构和类型无关,因此他们可以从简单的数组到高度复杂容器的任何数据结构上使用。
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。<functional>中则定义了一些模板类,用以声明函数对象。
容器
容器是一种数据结构,如list,vector和deques,以模板类的方法提供。为了访问容器中的数据,可以使用容器类输出的迭代器。
数据结构 |
描述 |
头文件 |
vector向量 |
连续存储元素 |
<vector> |
list列表 |
由节点组成的双向链表,每个节点包含一个元素 |
<list> |
deque双列表 |
连续存储的指向不同元素的指针所组成数组 |
<deque> |
set集合 |
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序
|
<set> |
multiset多重集合 |
允许存在两个次序相等的元素的集合
|
<set> |
stack栈 |
后进先出的值的排列
|
<stack> |
queue队列 |
先进先出的执的排列
|
<queue> |
priority_queue优先队列 |
元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列
|
<queue> |
map映射 |
由{键,值}对组成的集合,以某种作用于键对上的谓词排列
|
<map> |
multimap多重映射 |
允许键对有相等的次序的映射
|
<map> |
对应的数据结构:vector线性表,list双向链表,stack栈,queue队列,deque可以理解为vector和list的结合体,set红黑树,map平衡二叉树
容器分为三大类
顺序容器 |
vector:后部插入/删除,直接访问
deque:前/后部插入/删除,直接访问
list:双向链表,任意位置插入/删除
|
关联容器 |
set:快速查找,无重复元素
multiset:快速查找,可有重复元素
map:一对一映射,无重复元素,基于关键字查找
multimap:一对一映射,可有重复元素,基于关键之查找
|
容器适配器 |
stack:LIFO
queue:FIFO
priority_queue:优先级高的元素先出
|
迭代器
迭代器提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象。
软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。
<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,
<iterator>中提供了迭代器使用的许多方法,
而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。
分享到:
相关推荐
STL关联容器概述1
第4章 C++STL泛型库概述 第5章 C++STL泛化技术分析 第三篇 C++STL容器技术 第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11章 set集合容器 第12章 ...
STL的容器deque的详细使用方法和文档 6.0代码
第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...
sgi stl 内部文件(sgi stl真正实现于此) 018 1.8.3 sgi stl 的组态设定(configuration) 019 1.9可能令你困惑的c++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5...
模板 函数模板 类模板 断言 STL概述 STL容器 STL 迭代器 STL 算法 STL其他构件
第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...
本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将...
STL概述 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组...
大致介绍了直接使用排序,与自己重新定义STL排序函数的方法。
本书概述 作为对《C++17 STL Cook book》的中文翻译。 C++因其快捷、高效和灵活的特点,帮助人们解决了很多问题,在很多领域种都有所使用。其将要到来的新版本,将会改变人们的编程习惯。如果想要掌握更加高明的编程...
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程...
第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...
3-1 模板概述· · · · · · • · · · · · · · · · · · · ·...................................... 104 3-1-1 Smalltalk 方法,· · · · · · · ·-· · · · · · · · · · ·., ........
,C++模板与STL库介绍,1. 概论 2. 模板机制的介绍 3. STL中的基本概念 4. 容器概述 5. 迭代器 6. 算法简介
5.1.1 SFC概述 5.1.2 SFC程序的创建步骤及方法 5.2 步进梯形图(STL) 5.3 SFC及STL的编程规则 5.4 多流程顺序控制 5.4.1 选择分支与汇合 5.4.2 并行分支与汇合 5.4.3 跳步与循环 5.5 SFC及STL的应用...
概述 随着2000年互联网泡沫的破灭,IT近几年徘徊在低谷,复苏艰难。然而VoIP(voice over internet protocol)技术带来的冲击波却在不断增强。VoIP又叫IP电话,泛指在以IP为网络层协议的计算机网络中进行话音通信...
标准库概述 标准库概述 标准库概述 标准库概述 标准库概述
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
本书从S7—300/400的介绍、基本功能、数字功能、程序流控制以及程序处理等几个方面详细阐述了S7—300/400的STL和SCL编程语言及其使用方法,主要内容包括系统概述(SIMATIC S7和CTEP 7)、编程语言STL和SCL、数据...