关于STL的详细内容,这篇博客描述的非常清楚:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/22/2603525.html
STL:Standard Template Library,标准模版库。
STL六大组件:
容器(Container),是一种数据结构,如list,vector,deques,以模版类的方法提供。
迭代器(Iterator),提供了访问容器中对象的方法。迭代器就如同一个指针。
算法,用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。
其它略。
STL容器:
1)序列式容器:vector、deque、list
vector:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时。
deques:双端队列。可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时。
list:双向链表。不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针。
2)关联式容器:元素位置取决于特定的排序准则,和插入顺序无关,set、multiset、map、multimap
set/multiset:内部的元素依据其值自动排序,set内的相同数值的元素只能出现一次。multiset内可包含多个数值相同的元素,内部由二叉树实现,便于查找。
map/multimap:map的元素是成对的键值/实值,内部的元素依据其自动排序,map内的相同数值的元素只能出现一次。multimap内可包含多个数值相同的元素。内部由二叉树实现,便于查找。
另外有其他容器hash_map,hash_set,hash_multiset,hash_multimap。
STL迭代器:
用于提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
迭代器一般声明使用示例:
vector<T>::iterator it;
list<T>::iterator it;
deque<T>::iterator it;
数据结构 |
| 实现头文件 |
向量(vector) | 顺序性容器 | <vector> |
列表(list) | 顺序性容器 | <list> |
双队列(deque) | 顺序性容器 | <deque> |
集合(set) | 关联容器 | <set> |
多重集合(multiset) | 关联容器 | <set> |
栈(stack) | 容器适配器 | <stack> |
队列(queue) | 容器适配器 | <queue> |
优先队列(priority_queue) | 容器适配器 | <queue> |
映射(map) | 关联容器 | <map> |
多重映射(multimap) | 关联容器 | <map> |