【正确答案】
【答案解析】vector为存储的对象分配一块连续的地址空间,对vector中的元素随机访问效率很高。在vector中插入或者删除某个元素,需要将现有元素进行复制、移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,效率是很高的。
list表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来从而允许向前和向后两个方向进行遍历,list中的对象是离散存储的。在list的任意位置插入与删除元素的效率都很高,指针必须被重新赋值,但是不需要用拷贝元素来实现移动。它对随机访问的支持并不好,访问一个元素需要遍历中间的元素,另外每个元素还有两个指针的额外空间开销,随机访问某个元素需要遍历list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改变元素的指针即可。
vector内部使用顺序存储,访问速度快,但是删除数据比较耗费性能。list内部使用链式存储,访问速度慢,但是删除数据比较快。
一般应遵循下面的原则:
1)需要高效的随机存取,而不在乎插入和删除的效率,使用vector。
2)需要大量的插入和册0除,而不关心随机存取,则应使用list。
3)需要随机存取,而且关心两端数据的插入和删除,则应使用deque。