三种顺序容器的比较

vector:矢量容器

三种顺序容器的比较_第1张图片

  •  插入:push_back(尾插)   O(1)    

                    insert (按位置插入)  O(n)

  • 删除:pop_back(尾删)O(1)

                  erase(按位置删)  O(n)

  • 访问:O(1)

优点:尾部操作和随机访问速度快

缺点:不支持头插、任意位置删除和插入复杂度较高

扩容方式:

1.倍数开辟二倍的内存

2.旧的数据拷贝到新内存

3.释放旧的内存

4.指向新的内存

list 双向循环链表 

三种顺序容器的比较_第2张图片

  • 插入:insert (按位置插入)  O(1)

                 push_front (头插)  O(1)

                 push_back(尾插)O(1)

  • 删除:pop_back(尾删)O(1)

                 pop_front(头删)O(1)

                 erase(按位置删)O(1)

  • 访问:  O(n)

优点:插入和删除的速度快

缺点:访问速度慢,不支持系统默认的sort排序,内存不连续

deque

deque 容器底层不连续,deque的迭代器将其连续

三种顺序容器的比较_第3张图片

  • 插入:push_back(尾插)  O(1)

                  push_front(头插)  O(1)

                  insert (按位置插)    O(n)

  • 删除:pop_back(尾删)O(1)

                  pop_front(头删)O(1)

                 erase(按位置删) O(n)

  • 访问:O(1)

优点:头尾插入和删除以及访问速度快

缺点:按位置插入和删除速度慢

扩容:

deque的扩容包含两部分,数据区域以及映射区域的扩容

数据区域扩容:数据区域的指针指向数据区域的中间,保证头部有空间,数据区域满时对映射区域进行调整,在合适的位置开辟新的数据区域

映射区域扩容:映射区域中已使用的映射区移到中间,保证上下游空闲的位置。

你可能感兴趣的:(C++)