C++ STL 简介

什么是STL

STL全程为standard template library 即标准模板库,是由惠普实验室开发的一系列软件的统称。
STL可分为容器、迭代器、空间配置器、配接器、算法和伪函数六个部分。


下面来简单的介绍下比较常用的容器,迭代器和算法部分。

容器

STL中提供了很多的容器,即数据存储结构。这些存储结构各有优缺点,STL在底层实现中做了很多的优化,最终封装成了12个模板,在这先做一个简单的介绍,后续我们再详细的介绍各个容器的用处与用法。

容器名称

容器介绍

头文件

向量(vector)

连续存储的元素(也有地方称作可变长数组)

vector

列表(list)

由结点组成的双向链表,每个结点包含着一个元素

list

双端队列(deque)

连续存储的指向不同元素的指针所组成的数组

deque

栈(stack)

后进先出的队列

stack

队列(queue)

先进先出的队列

queue

优先队列(priority_queue)

元素的次序是由作用于所存储的值对上的某种谓词决定的一种队列

queue

集合(set)

由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素队的谓词排列,没有两个不同的元素值

set

多重集合(multiset)

允许两个元素值相等的元素集合

set

映射(map)

(由{键:值}对组成的集合,以某种作用于键对上的谓词排列

map

多重映射(multimap)

允许有相同键值对的映射

map

对(pair)

和map相似,但只有一对键值

utility

智能指针(auto_pyr)

将一个用new开辟内存的指针赋给auto_ptr,会自动回收空间

memory

迭代器

迭代器在STL中的作用是将算法和容器联系起来,起着一种粘合剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素.
例如:

for (set<int>::iterator it = all_ans.begin() ; it != all_ans.end(); it++) {
cout<<*it;
if(i % 6 == 0)
cout<<endl;
else
cout<<" ";
i++;

}

这段代码中的it就是set的一个迭代器,相当于指针的作用。STL算法中的参数以及返回值多数为迭代器。

算法

STL中封装了大量的常用算法,这些算法都是经过优化之后的算法。例如sort()排序算法,swap()交换,next_permutation()全排列等等。STL中提供了大约100个实现算法的模板函数。其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移出、反转、排序、合并等等。后续我们再将常用的模板函数进行详细的介绍