顺序容器:vector, list, deque, string, array
C++ STL总结
- STL概述
STL (Standard Template Library, 标准模板库) 是惠普实验室开发的一系列软件的统称。主要核心分为三大部分:容器(container)、算法(algorithm)和迭代器(iterator),另外还有容器适配器(container adaptor)和函数对象(functor)等其它标准组件。
- 容器:
顺序容器:
名称 |
特性 |
vector |
模拟的数据结构式动态数组,在内存中是连续储存的,支持随机存取,支持在尾部快速插入和删除元素,搜索速度较慢 |
deque |
称为双端队列,在内存中的储存方式是小片连续,每片之间用链表连接起来,支持随机存取,支持在头部和尾部快速插入和删除元素,搜索速度较慢 |
list |
称为双向链表,在内存中的储存是不连续的,每个元素的内存之间用指针相连,不支持随机存取(因为要从首或尾遍历至指定位置),但是支持在任意位置快速插入和删除元素,搜索速度最慢,扩展内存时无需复制和拷贝原元素 |
array |
称为静态数组,在内存中是连续储存的,支持随机存取,不支持插入或删除元素 |
forward_list |
称为前向链表,在内存中的储存是不连续的,同list一样支持在任意位置快速插入和删除元素,不支持随机存取,搜索速度也较慢,与list最大的区别在于其只能从头部遍历至尾部,不能反向遍历,因此没有保存后向指针,比list更省内存,插入和删除元素比list稍慢。 |
注:红色加粗的容器为C++11标准中新增的
关联式容器:
名称 |
特性 |
set |
以红黑树实现,内存中是不连续储存的,保存的是元素是唯一的键值且不可变,排列的方式根据指定的严格弱序排列,不支持随机存取,搜索速度较快 |
multiset |
与set基本一致,差别就在于允许保存重复键值 |
map |
同样以红黑树实现,保存的元素是一个pair类型{key, value},每个键值对应一个值,且键值唯一不可变,键值的排列方式根据指定的严格弱序排列,支持用key进行随机存取,搜索速度较快 |
multimap |
与map基本一致,差别在于键值可以重复 |
名称 |
特性 |
unordered_set |
以哈希表实现,内存中是不连续储存的,保存的是元素是唯一的键值且不可变,无序的排列方式, |