STL包含:容器、算法、迭代器、仿函数和适配器
本文只讲容器,实现原理也是我们常见的数据结构。
1、序列式容器
vector:也叫向量,尾部可变长数组。内部通过数组实现。空间不够时会重新分配内存,然后将原来的元素拷贝到新分配的数组中。
queue:数组、单向队列。先入先出。能将任意类型的序列容器转换为队列,由deque支持。
deque:数组、双向队列。分配中央控制器map(不是map容器),map记录着一系列固定长度的数组地址,真正的数据放在数组。首尾部可变长数组。空间不够时会分配新数组然后将原数组元素拷贝到新数组。效率低于vector,尽量使用vector。
stack:使用deque作为支持,能将任意类型的序列容器转换为栈。
list:双向链表。
slist:单向链表。
priotity_queue:有权值的queue,实现原理是堆,使用vector作为底层存储,实现原理也是数组。
2、关联式容器
set与map的区别:set是关键字即值,map是存储
set、map有序无重复,multiset、multimap有序有重复。
undered_map 和 undered_set无序无重复
undered_multimap 和 undered_multiset无序有重复
set、multi_set、map、multi_map:基于红黑树,一种加了额外平衡条件的二叉搜索树。
hash table:散列表。
hash_map、hash_set、hash_multimap、hash_multiset:基于hash table。
undered_map、undered_multimap、undered_set、undered_multiset:基于hash table。