vector | deque | list | set | multiset | map | multimap | ||
经典内存结构 | 单端数组 | 双端数组 | 双向链表 | 二叉树 | 二叉树 | 二叉树 | 二叉树 | |
可随机存取 | 是 | 是 | 否 | 否 | 否 | 对key而言:不是 | 否 | |
元素搜寻速度 | 慢 | 慢 | 非常慢 | 快 | 快 | 对key而言:快 | 对key而言:快 | |
元素安插移除 | 尾端 | 头尾两端 | 任何 位置 | ... | ... | ... | ... |
- vector使用场景:比如软件历史操作记录,我们常要查看历史记录,但却不会去删除记录,因为记录是事实描述。
vector 与 deque的比较:
一:vector.at()比 deque() 效率高,比如vector.at(0)是固定的,deque的开始位置是不固定的。
二:如果有大量释放操作的话,vector花的时间更少,这跟二者内部实现有关。
三:deque 支持头部的快速插入和移除,这是deque的优点。
- list 使用场景:比如公交车乘客的存储,随时可能有乘客下车,支持频繁的不确定位置元素的移除插入。
- set 使用场景: 比如对手机游戏的个人得分记录的存储,存储要求从高分到低分的排序排列。
- map 使用场景: 比如按ID号存储十万个用户,想要快速通过ID查找到对应的用户,二叉树的查找效率,这时就体现出来了,如果是vector容器,最坏情况下可能要遍历整个容器才能查找到用户。