STL常用之vector,list,stack,queue,deque总结与对比

简介: STL常用之vector,list,stack,queue,deque总结与对比

一,vector

1)底层

vector的底层是开辟出来的一块连续空间,类似于数组,每次空间满了之后会根据不同的编译器有不同的扩容倍数。

2)优劣

优点:随机访问效率高,因为地址是连续的,底层完全支持下标访问。

劣处:由于地址是连续,头插头删很麻烦,因为有元素的移动。扩容有空间的浪费和降低效率,扩容要重新开辟空间,并且要将元素全部复制过去,并且无法按需申请。

二,list

1)底层

list底层是带头双向链表,哨兵位的prv指针指向最后一个元素,最后一个元素的next指针指向第一个元素,地址不连续。

2)优劣

优点:删除任何一个元素效率很高,只需要改变指针的指向即可,没有空间的浪费,扩容效率高,按需申请即可。

劣处:随机访问效率低,因为地址是不连续的,需要STL内部封装++,--等操作符。

三,deque

1)底层

deque的底层是vector和list的结合,空间是许多块连续空间的地址组成的,也就是有一定的顺序但并不完全有序。

2)优劣

deque是vector和list的结合体,相较来说优劣与list和vector来说并不明显,比较中庸。

四,stack与queue
1)底层

stack和vector的底层是可以指定容器的,一般是前面三种容器,默认是deque,我们来看一下C++官网对它们的参数介绍

四,总结

没有哪一种容器是绝对优秀的,在使用的时候我们需要根据自己的需求来判断使用什么容器,比如删除插入频繁扩容频繁建议使用list,如果有很强的随机访问需求建议使用vector,如果兼有这些需求建议使用deque。

相关文章
|
3天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
3天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
1月前
|
安全 Java API
Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的,可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
25天前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
19 6
|
1月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
|
1月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0
|
1月前
|
Java API
java 对象list 使用stream进行过滤
在Java中,你可以使用Stream API对对象列表进行过滤。假设你有一个`List<MyObject>`,并且你想根据某些条件过滤出特定的对象。以下是一个示例: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<MyObject> myObjects = ... // 初始化你的对象列表 List<MyObject> filter
|
1月前
|
算法 安全 Java
java将list中的某个元素移动位置
【2月更文挑战第12天】
|
2月前
|
Java 索引
java list中包含某个字符串
【2月更文挑战第9天】