C++ 面试题 目录

C++ 中 vector、list 和 deque 的区别是什么?

推荐答案

在C++中,vectorlistdeque是三种常用的序列容器,它们的主要区别如下:

  • vector:动态数组,支持快速随机访问,但在中间插入或删除元素效率较低。
  • list:双向链表,支持高效的插入和删除操作,但不支持随机访问。
  • deque:双端队列,支持快速随机访问和在两端高效插入或删除元素。

本题详细解读

vector

  • 底层实现vector是一个动态数组,元素在内存中是连续存储的。
  • 优点
    • 支持快速随机访问,时间复杂度为O(1)。
    • 在尾部插入和删除元素效率高,时间复杂度为O(1)。
  • 缺点
    • 在中间或头部插入或删除元素效率低,时间复杂度为O(n)。
    • 当容量不足时,需要重新分配内存并复制元素,可能导致性能下降。

list

  • 底层实现list是一个双向链表,元素在内存中是非连续存储的。
  • 优点
    • 在任意位置插入和删除元素效率高,时间复杂度为O(1)。
    • 不需要重新分配内存,插入和删除操作不会使迭代器失效。
  • 缺点
    • 不支持随机访问,访问元素需要遍历链表,时间复杂度为O(n)。
    • 由于链表节点的额外开销,内存占用较高。

deque

  • 底层实现deque是一个双端队列,通常由多个固定大小的数组块组成。
  • 优点
    • 支持快速随机访问,时间复杂度为O(1)。
    • 在两端插入和删除元素效率高,时间复杂度为O(1)。
    • 不需要像vector那样频繁重新分配内存。
  • 缺点
    • 在中间插入或删除元素效率较低,时间复杂度为O(n)。
    • 内存占用较高,因为需要维护多个数组块。

总结

  • vector:适合需要频繁随机访问且主要在尾部进行插入和删除操作的场景。
  • list:适合需要频繁在任意位置插入和删除操作的场景。
  • deque:适合需要在两端频繁插入和删除操作且需要随机访问的场景。
纠错
反馈