day22|C++重难点之 vector和list的区别、vector 底层原理和扩容过程
55.vector和list的区别
1.vector
- 动态数组:基于动态扩展的数组实现,这说明 它在内存中 连续存储 元素
- 随机访问:提供快速的随机访问的能力,可以通过 索引 快速访问任何元素
- 内存分配:通常在内存中分配上 更紧凑,因为 元素紧密排列,没有 额外的空间 用于链接或指针
- 时间复杂度:
- 元素访问:时间复杂度为O(1)
- 插入和删除:在末尾是O(1);在中间的话,可能需要O(n),因为可能需要移动 后续所有的元素
- 内存管理:因为使用连续内存分配,使用可以利用 缓存,提高 访问速度
2.list
- 双向链表:基于双向链表的容器,每个元素通过指针 链接到前一个和后一个元素
- 非连续存储:元素在内存中 不是连续存储的
- 时间复杂度
- 元素访问:O(n),因为需要从头开始 遍历到所需位置
- 插入和删除:非常快速,在中间插入和删除的时候,依然是O(1),前提是已经拥有 指向 待插入或删除元素的 迭代器
- 内存管理:由于元素之家通过指针链接,内存分配可能更加 分散,但插入和删除操作 不需要移动其他元素
3.使用场景
-
vector
- 需要快速