C++STL简介

本文仅仅是个人学习的过程中结合网上博文,对STL的整理,也仅仅是简介。仅为个人学习笔记。

一、STL简介(摘自:晨光(Morning)

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的VCL(Visual Component Library),对于此二者,大家一定不会陌生吧。

从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术。

从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性--模板(template)。如果查阅任何一个版本的STL源代码,你就会发现,模板作为构成整个STL的基石是一件千真万确的事情。除此之外,还有许多C++的新特性为STL的实现提供了方便。

二、STL内容

STL中六大组件:
1、容器(Container)

是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;

容器分为:顺序容器关联容器,容器适配器(stack,queue,priority queue),位集(bit_set),串包(string_package)等等。

2、迭代器(Iterator)

提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;

Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。

迭代器的作用:能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来,重载了*,++,==,!=,=运算符。用以操作复杂的数据结构,容器提供迭代器,算法使用迭代器;常见的一些迭代器类型:iterator、const_iterator、reverse_iterator和const_reverse_iterator,

更详细的用法可以参见:lhx060288的博文。
3、算法(Algorithm)

是用来操作容器中的数据的模板函数。

例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;

更多详细的算法参考:ChenZhongzhou的博文。
4、仿函数(Function object)

仿函数(functor)又称之为函数对象(function object),其实就是重载了()操作符的struct。

1)仿函数不是函数,它是个类;
2)仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用

仿函数的用处(摘自:gaojun
不管是对象还是函数指针等等,它们都是可以被作为参数传递,或者被作为变量保存的。因此我们就可以把一个仿函数传递给一个函数,由这个函数根据需要来调用这个仿函数(有点类似回调)。
STL 模板库中,大量使用了这种技巧,来实现库的“灵活”。for_each, 它的源代码大致如下:

1 template< typename Iterator, typename Functor >
2 void for_each( Iterator begin, Iterator end, Fucntor func )
3 {
4    for( ; begin!=end; begin++ )
5    func( *begin );
6 }

这个 for 循环遍历了容器中的每一个元素,对每个元素调用了仿函数 func,这样就实现了 对“每个元素做同样的事”这样一种编程的思想。特别的,如果仿函数是一个对象,这个对象是可以有成员变量的,这就让 仿函数有了“状态”,从而实现了更高的灵活性。

5、迭代适配器(Adaptor)

STL提供了三个容器适配器:queue、priority_queue、stack。这些适配器都是包装了vector、list、deque中某个顺序容器的包装器。注意:适配器没有提供迭代器,也不能同时插入或删除多个元素。下面对各个适配器进行概括总结。
6、空间配制器(allocator)

其中主要工作包括两部分1.对象的创建与销毁    2.内存的获取与释放

详见:xy913741894华山大师兄

Ref:

http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html#top

时间: 2024-10-26 11:57:36

C++STL简介的相关文章

C++ 泛型程序设计与STL模板库(1)---泛型程序设计简介及STL简介与结构

泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念 用来界定具备一定功能的数据类型.例如: 将"可以比大小的所有数据类型(有比较运算符)"这一概念记为Comparable 将"具有公有的复制构造函数并可以用'='赋值的数据类型"这一概念记为Assignable 将"可以比大小.具有公有的复制构造函数并可以用'='赋值的所有数据类型"这个概念记

学习STL -- STL 简介

STL简介 STL,标准模板库,是C++语言提供的一个基础模板集合,最初由惠普实验室开发,1998年被定为国际标准,成为C++的标准库. 在C++标准中,STL 被组织为13个头文件:<algorithm>.<deque>.<functional>.<iterator>.<vector>.<list>.<map>.<memory>.<numeric>.<queue>.<set>

C++之STL简介

1. STL简介: 标准模板库(STL,即Standard Template Library),是一个C++软件库,也是C++标准程式库的一部分.模板是C++程序设计语言的一个比较新的重要特征,而标准模板库(STL)正是基于此特征.标准模板库(STL)使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性. STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比

C++--第23课 - STL简介

第23课 - STL简介 1. 标准模板SLT C++的作用就是提高程序书写的效率,那么就得代码复用. STL,即:Standard Template(样板) Library,是C++的一部分(常用的数据结构).STL是常用数据结构和算法的集合.STL的目标是标准化组件,提高开发效率和程序可靠性. STL库作为为C++的一部分与编译器一同被发布.STL主要由以下3个部分组成: 容器(Container):管理数据的集合 算法(Algorithm):处理集合内的元素 迭代器(Iterator):遍

C++标准模板库Stand Template Library(STL)简介与STL string类

参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进行过学习和总结,但并没有一个宏观上的把握,现在通过上一篇和这一篇博文,将对C++模板以及基于C++模板的STL关联起来,形成一个总体的把握,对于掌握C++中模板(template)这一强有力的工具会十分有帮助.本文的主要内容有: (1) STL容器: (2) STL迭代器: (3) STL算法: (4) ST

网易云课堂_C++程序设计入门(下)_第11单元:工欲善其事必先利其器 - STL简介_第11单元 - 单元作业1:OJ编程 - vector 与 sort

第11单元 - 单元作业1:OJ编程 - vector 与 sort 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 本次作业练习使用 vector 容器以及 sort 算法,对输入的数据进行排序 依照学术诚信条款,我保证此作业是本人独立完成的. 1 本次作业练习使用 vector 容器以及 sort 算法,对输入的数据进行排序(5分) 题目的具体内容参见 [第

第一篇:STL简介

写在前面的话:在网上找了好多都没有找到合适的STL资料,无奈只能看英文的,可是英文水平着实太搓,翻译下来自己都感觉不好意思,所以挂上来让大家指正,希望多多批评! 标准模版库介绍(STL) 标准模版库,或者STL,是一种C++容器类库,算法和迭代器:它提供很多种计算机科学的基础算法和数据结构.STL是一种一般的库,意味着它的组件有强烈的参数化,几乎每一个STL的组件都是一个模板.你应该在你使用STL之前理解模板是如何在C++中工作的. 容器和算法 和很多类库一样,STL包括容器类,这些类库目的是包

C++的标准模板库(STL)简介

STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI/ISO C++标准的一部分.各个C++厂商也有各自相应的模板库,这些库效率可能很高,但可移植性不一定好. 在C++标准中,STL被组织为下面的17个头文件:<algorithm>.<deque>.<functional>.<iterator>.<arra

STL简介

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库. 从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等.与OOP(object-oriented programming)中的多态(polymorp