[C++]vector,list和deque的区别

vector封装了数组,拥有一段连续的内存空间,并且起始地址不变。因此vector可以非常好地支持随机存取,支持[]操作符重载和vector.at()。

但是由于它的内存空间是连续的,所以在vector中间进行插入和删除会造成内存块的拷贝和移动,复杂度是O(n)。 此外,当该数组的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝,这些都降低了vector的效率。

但是在vector的尾部插入速度很快,所有vector有push_back()和pop_back()操作。


list封装了双向链表,因此它的内存空间可以是不连续的,因此只能通过指针来进行数据访问。list的随机存取变得非常没有效率,需要遍历所有元素,搜索复杂度O(n)。

但是list可以很方便地支持任意位置的删除和插入,只要修改指针的指向就行了。list相对vector占用内存较多。


deque 双端队列,在功能上合并了vector和list,随机访问方便,在内部可以方便地进行插入和删除操作,可以在两端进行push,pop。缺点是占用内存多。


猜你喜欢

转载自blog.csdn.net/michellechouu/article/details/50705766