STL 基础

来源:互联网 发布:php mysql是什么 编辑:程序博客网 时间:2024/06/06 04:14

STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的。

容器和算法通过迭代器进行无缝相连。

1、容器种类:

    1)向量(vector)

可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的插入和删除就有的时间复杂度与到末尾的距离成正比,尤其对向量头的添加和删除的代价是惊人的高的

    2)表(list)

对任意元素的访问与对两端的距离成正比,但对某个位置上插入和删除一个项的花费为常数时间。

    3)双端队列(deque)

基本上与向量相同,唯一的不同是,其在序列头部插入和删除操作也具有常量时间复杂度

    4)队列(queue)

插入只可以在尾部进行,删除、检索和修改只允许从头部进行。按照先进先出的原则。

    5)堆栈(stack)

堆栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最近插入序列的项。即按照后进先出的原则

    6)集合(set)

由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序,具有快速查找的功能。但是它是以牺牲插入车删除操作的效率为代价的

    7)多重集合(multiset)

和集合基本相同,但可以支持重复元素具有快速查找能力

    8)映射(map)

由{键,值}对组成的集合,以某种作用于键对上的谓词排列。具有快速查找能力

    9)多重映射(multi)

比起映射,一个键可以对应多了值。具有快速查找能力

2、迭代器种类:

     1)input iterators(输入迭代器):只能向前移动,每次只能移动一步,只能读他们指向的东西,而且只能读一次。他们以一个输入文件中的read pointer(读指针)为原型;

     2)output iterators(输出迭代器):与上类此,只不过用于输出,他们只能向前移动,每次只能移动一步,只能写他们指向的东西,而且只能写一次。它们以一个输出文件中的write pointer(写指针)为原型;

    3)forward iterators(前向迭代器):这种迭代器能做输入和输出迭代器可以做的每一件事,再加上他们可以读或写他们指向的东西一次以上。这就使得他们可用于multi-pass运算。

    4)bidirectional iterators(双向迭代器)为前向迭代器加上了向后移动的能力。STL的list的iterators属于这一类。set,multise,map和multimap的迭代器也一样。

    5)random access iterators(随机访问迭代器):这种迭代器为双向迭代器加上迭代器运算能力,也就是说在常量时间里向前或向后跳转一个人意的距离。vector,deque和string的迭代器属于这种。