一、什么是STL?
(Standard Template Library,STL)标准模板库,所谓模板,是指不必预先制定类型的函数或类。可以借助STL提供的高效算法来管理数据。STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像容器(container),算法(algorithmn),迭代子(iterator)等。
二、STL内容介绍
- 容器(Container),是一种数据结构,如list,vector,和deques,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
- 迭代器(Iterator),提供了访问容器中对象的方法,类似于指针进行操作。
- 算法(Algorithm),是用来操作容器中的数据的模板函数。例如用sort()来对一个vector中的数据进行排序,也可以对数据进行排序。
- 仿函数(Function object)
- 迭代适配器(Adaptor)
- 空间配制器(allocator)
2.1容器
STL中的容器有队列容器和关联容器,容器适配器(congtainer adapters:stack,queue,priority queue),位集(bit_set),串包(string_package)等等。
1、序列容器,每个元素都有固定位置,如vector、deque、list等:
(1)Vectors:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;
(2)Deques:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;
(3)Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;
2、关联式容器,如set、multiset、map、multimap等;
(1)Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现,便于查找;
(2)Maps/Multimaps:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现,便于查找;
2.2常见容器的基本使用
1、vector的成员函数示例及使用
函数名 | 功能 | 复杂度 |
---|---|---|
size( ) | 返回向量的元素数 | O(1) |
push_back(x) | 在向量末尾添加元素x | O(1) |
pop_back( ) | 删除向量的最后一个元素 | O(1) |
begin( ) | 返回指向向量开头的迭代器 | O(1) |
end( ) | 返回指向向量末尾的迭代器 | O(1) |
insert(p, x) | 在向量的位置p处插入元素x | O(n) |
erase( p ) | 删除向量中位置p的元素 | O(n) |
clear( ) | 删除向量中所有元素 | O(n) |
2、list的成员函数实例及使用
函数名 | 功能 | 复杂度 |
---|---|---|
size( ) | 返回表的元素数 | O(1) |
push_front(x) | 在表的开头添加元素x | O(1) |
push_back(x) | 在表的末尾添加元素x | O(1) |
pop_front( ) | 删除位于表开头的元素 | O(1) |
pop_back( ) | 删除位于表末尾元素 | O(1) |
begin( ) | 返回指向表开头的迭代器 | O(1) |
end( ) | 返回指向表末尾的迭代器 | O(1) |
insert(p, x) | 在表的位置p处插入元素x | O(1) |
erase( p ) | 删除表中位置p的元素 | O(1) |
clear( ) | 删除表中所有元素 | O(n) |
3、queue的成员函数实例及使用
函数名 | 功能 | 复杂度 |
---|---|---|
size( ) | 返回队列的元素数 | O(1) |
front( ) | 返回队头的元素 | O(1) |
pop( ) | 从队列中取出并删除元素 | O(1) |
push(x) | 向队列中添加元素x | O(1) |
empty( ) | 在队列为空时返回true | O(1) |
4、stack的成员函数实例及使用
函数名 | 功能 | 复杂度 |
---|---|---|
size( ) | 返回栈的元素数 | O(1) |
top( ) | 返回栈顶的元素 | O(1) |
pop( ) | 从栈中取出并删除元素 | O(1) |
push(x) | 向栈中添加元素x | O(1) |
empty( ) | 在栈为空时返回true | O(1) |