Vector-向量数组
一般是维了解决程序定义的数组是不能动态地改变大小这个缺点而出现的。一般程序实现是在类创建的时候同时创建一个定长数组,随着数据不断被写入,一旦数据被填满,则重新开辟一块更大的内存区,把原有数据复制到新的内存区,抛弃原有的内存。
List-双向链表
它的优势在于动态增长和删除的能力,对于内存的清除、查找、随机访问比较费力,需要一个个进行遍历。
Deque-双向队列
拥有Vector和List两者的优点的双端队列,在建立deque容器的时候,一般便随着建立空间,就会建立数据,然后建立新空间,填充新的数据,没有原空间数据的删除和复制,是由多个连续的内存空间组成的。
它并不像Vector一样把所有的对象都保存在一个连续的内存块中,而是多个连续的内存块中,并且在一个映射结构中保存对这些块以及顺序的跟踪。
相比Vector
- 存取和迭代器的操作会比较慢一点
- 迭代器是特殊的智能指针,需要在不同的区块之间进行跳转
- 可包含更多的元素,因为使用不止一块内存
讨论:所以通常对Vector和List进行push_back的时候,Vector的效率会比List高。又一个特殊情况,在Vector数组被填满的时候,这个时候再push_back时,此时List的效率会高一点,因为此时Vector需要重新开辟一块更大的内存区,会对原空间的数据进行复制和删除操作,因而会影响效率。