STL是标准模板库(Standard Template Library)的简称,它是一些常用数据结构和算法模板的集合。主要由Alex Stepanov开发,于1998年被添加到C++标准。
有了STL,你不必再从头写太多的数据结构和算法,可以通过调用STL中的现成的数据结构和算法,并且性能较高。
STL中的几个概念:
1、容器:可容纳各种数据类型的数据结构。
2、迭代器:可依次存取容器中元素的东西。
3、算法:用来操作容器中的元素的函数模板。例如:STL用sort()来对一个vertor的数据进行排序,用find()来搜索一个list中的对象。
注:函数本身与他们操作的数据结构与类型无关,因此它们可以在从简单数组到高度复杂容器的任何数据结构上使用。
比如,数组int array[100]就是个容器,而int *类型的指针变量就可以作为迭代器,可以为这个容器编写一个排序算法。
一、容器概述
容器可以用于存放各种类型的数据(基本类型的变量、对象等)的数据结构。
容器分为三大类:
1)顺序容器
vector:后部插入/删除,直接访问
deque:前/后部插入/删除,直接访问
list:双向链表,任意位置插入/删除
2)关联容器
set:快速查找,无重复元素。默认按升序排序
multiset:快速查找,可有重复元素。其它性质和set类似
hash_set:与set相比较,它里面的元素不一定是经过排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度,速度更快
hash_multiset:键值可以不唯一。其他特点和hash_set相同
map:一对一映射。无重复映射,基于关键字查找
multimap:一对一映射。可有重复元素,基于关键字查找
hash_map:与map相比较,它里面的元素不一定是按键值排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度,其他和map性质相同
hash_multimap:键值可以不唯一,其他特点与hash_map相同
前2者称为第一类容器
3)容器适配器
stack:LIFO,后进先出
queue:FIFO,先进先出
priority_queue:优先级高的元素先出
顺序容器介绍:
1)vector头文件 #include
实际上就是个 动态数组。随机存取任何元素都能在常数时间完成,在尾端增衫元素具有较佳的性能。
2)deque头文件 #include
也是个动态数组,随机存取任何元素都能在常数时间完成,性能次于vector,在两端增删元素具有较佳的性能。
3)list头文件 #include
双向链表,在任何位置增删元素都能在常数时间内完成。不支持随机存取。
上述三种容器称为顺序容器,是因为元素的插入位置同元素的值无关。