list和vector的区别

vector是联系内存容器,它为存储的对象分配一块连续的地址空间,内存布局与C完全相同。
在vecotor中插入或者删除某个元素,将影响到效率和异常安全性(除非是在容器的尾部)。
如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行移动的时候开销会较大。
vector在每次扩张容量的时候,将容量扩展2倍。一旦空间重新配置,原迭代器将全部失效。
vector迭代器普通指针类型,因此为RandomAccess Iterator,因此对vector中的元素访问效率很高。
vector重载了[] 操作符。


list是双向链表,对象是离散存储的,它的迭代器是通过一个类模板实现,是Bidirectional Iterator,随机访问某个元素需要遍历list。
list只有在每当插入或者删除一个元素的时候,才分配或者释放相应的内存。
对于任何位置的插入、删除操作,list都是常数时间。且这些操作不会引起原有迭代器失效。因此,list的插入删除操作具有“事务语义”,是强异常安全的。
list没有重载[]操作符。

猜你喜欢

转载自blog.csdn.net/YoungStunner/article/details/50762627