一,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。