STL中vector容器与list容器的主要区别

vector容器和list容器时STL中最常使用的两个容器,两者之间最大的区别在于它们底层实现的不同,vector的底层实现是基于数组,而list的底层实现是基于双向循环链表。

STL中vector容器与list容器的主要区别
(list底层结构示意图)

由于vector容器和list容器底层实现上的差异,导致两者在实现不同功能的效率上也有着一定程度的差别,这一点可以体现vector容器和list容器的优点的不同。

vector容器的优点:
1.vector的遍历速度比list更快(list的底层是链表,需要通过指针域才能从一个元素找到下一个元素,而vector的底层是数组,数组的遍历速度是要明显快于链表的)
2.对于单个元素而言,vector容器的占用内存要少于list(list的每个元素需要额外开辟空间作为指针域)

list容器的优点:
1.插入和删除元素时效率更高(链表的插入删除相比于数组会更加高效)
2.采用动态存储分配,不会造成内存的浪费和溢出(vector数组在执行功能时容易造成内存资源的浪费)
3.list在执行删除和插入时不会造成原有迭代器的失效,而这一点在vector中是不成立的(vector在扩容时会开辟一段新的内存空间,将原来的元素复制进去,原有的迭代器就失效了)

总体来说,vector的优势和list的优势是互补的,在实际的运用过程中,认识到vector和list特性的不同并正确选择容器,有利于提高程序运行效率。