详解vector,list,deque,使用与优缺点比较

vector/list对比

底层结构

  • 动态顺序表,一段连续空间
  • 带头结点的双向循环链表

随机访问

  • 支持随机访问,访问某个元素效率O(1)
  • 不支持随机访问,访问某个元素效率O(N)

插入和删除

  • 任意位置插入和删除效率低,需要搬移元素,时间复杂度为O(N),插入时有可能需要增容,增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低
  • 任意位置插入和删除效率高,不需要搬移元素,时间复杂度为O(1)

空间利用率

  • 底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高
  • 底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低

迭代器

  • 原生态指针
  • 对原生态指针(节点指针)进行封装

迭代器失效

  • 在插入元素时,要给所有的迭代器重新赋值,因为插入元素有可能会导致重新扩容,致使原来迭代器失效,删除时,当前迭代器需要重新赋值否则会失效
  • 插入元素不会导致迭代器失效,删除元素时,只会导致当前迭代器失效,其他迭代器不受影响

使用场景

  • 需要高效存储,支持随机访问,不关心插入删除效率
  • 大量插入和删除操作,不关心随机访问

deque

deque是一个双端队列, 因为底层结构的特殊性,当不需要进行遍历的时候,推荐使用deque,比如stack和queue底部使用的就是deque
deque综合了上述vector和list的所有优点,唯一的缺陷是,deque由于结构原因,当进行遍历的时候会存在大量的计算,因此效率会极低。

猜你喜欢

转载自blog.csdn.net/ifwecande/article/details/107916761