C++之deque

来源:互联网 发布:改变世界的算法 编辑:程序博客网 时间:2024/05/15 06:09

1 什么是STL

        STL就是C++ Standard Template Library,也就是标准模版库,是一个高效的C++程序库。STL包含六大组件:容器(container)、算法(algorithm)、迭代器(iterator)、配置器(allocator)、适配器(adapter)和函数对象(function object)。我们在学习这些组件时,应该按其重要程度来区别学习。重要成都由大到小是:泛型容器和泛型算法(表示任何类型和对象都可以使用这些容器和算法)>>迭代器>>配置器、适配器、函数对象。

        STL的主要头文件包括13个,分别是<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<numeric>、<memory>、<queue>、<set>、<stack>、<utility>,具体内容如表1所示。

表1 STL的主要头文件

头文件

内容

<deque>

deque的定义

<vector>

vector的定义

<list>

list的定义

<map>

map、multimap的定义

<set>

set、multiset的定义

<algorithm>

和<numeric>定义了STL的通用算法

<numeric>

和<algorithm>定义了STL的通用算法

<iterator>

所有在容器类型中定义的迭代器的祖先定义

<utility>

定义了pair,定义了基本的iterator

<memory>

主要是智能指针auto_ptr的定义和一些全局临时内存处理函数的定义;头文件包含了另一个重要头文件<xmemory>,主要是空间配置器allocator的定义

<queue>

queue、priority_queue的定义

<stack>

stack的定义

<functional>

通用函数对象的定义

 
        用概括性的语言来说,STL的各部分作用是:
    • 为了方便地存储数据,设计了容器;
    • 为了方便地遍历、查找、替换容器中的元素,设计了算法;
    • 为了方便地让容器、算法独立工作,设计了在二者之间起桥梁作用的迭代器;
    • 为了统一分配和控制容器中的内存,设计了配置器;
    • 为了更好地给算法传入参数,设计了函数对象;
    • 为了更好地扩展STL现有的接口,设计了适配器。

2 STL的历史       

        在STL的发展史中,总共产生了5个版本。
2.1 HP STL——第一个STL版本
        HP STL版本,就是惠普版本的STL库,是所有其他STL版本的鼻祖。其他版本的STL都是在此版本的基础上加以改进和实现的。
2.2 P.J. Plauger STL——Microsoft Visual C++的STL版本
        P.J. Plauger STL版本是由P.J. Plauger个人实现的,是HP STL版本的继承版本。Microsoft Visual C++中的STL库用的就是P.J. Plauger STL版本。P.J. Plauger STL版本不是开放源代码的,它的元代那是不能修改或销售的。
2.3 Rouge Wave STL——Borland C++ Builder5.0的STL版本
        Rouge Wave STL版本是由Rouge Wave公司开发的,也是HP STL版本的继承版本。该版本被Borland C++ Builder5.0所采用,可惜的是由于该版本长时间没有被更新过且它不完全符合STL标准,最后被弃用。
2.4 STLport——Borland C++ Builder6.0的STL版本
        STLport版本的STL最开始是俄罗斯人的一个开发项目,主要用途是把UNIX下的SGI STL代码一直到其他平台的主流编译器上,例如C++ Borland或Visual C++等。STLport版本的STL符合ANSI/C++的STL标准,因此也更容易移植。Borland C++ Builder6.0中的STL用的就是STLport版本。
2.5 SGI STL——GCC的STL版本
        SGI STL室友Silicon Graphics Computer System,Inc公司开发的,SGI STL同样也是HP STL版本的继承版本。Linux下的GCC编译器采用的正式SGI STL版本。GCC对C++语言标准的支持非常好,SGI STL在Linux平台上的性能非常出色。SGI STL是属于开发源代码的,因此读者可以修改和销售SGISTL版本。