vector和list的区别
4 分钟阅读
•
496 字
+
542 词
参考答案
-
vector
-
基于动态数组:
std::vector基于可以动态扩展的数组实现,这意味着它在内存中 连续存储 元素。 - 随机访问:提供快速的随机访问能力,可以 通过索引快速访问 任何元素。
- 内存分配:通常在内存分配上更紧凑,因为元素紧密排列,没有额外的空间用于链接或指针。
-
时间复杂度:
-
元素访问:
O(1),即常数时间复杂度。 -
插入和删除:在
vector的末尾是O(1),但如果需要在中间插入或删除元素,则可能需要O(n),因为可能需要移动后续所有元素。
-
元素访问:
- 内存管理:使用连续内存分配,可以利用缓存的优势,提高访问速度。
-
list
-
基于双向链表:
std::list是基于 双向链表 的容器,每个元素通过节点链接到前一个和后一个元素。 - 非连续存储: 元素在内存中不是连续存储的 ,每个元素包含指向前一个和后一个元素的指针。
-
时间复杂度:
-
元素访问:
O(n),需要从头开始遍历到所需位置。 -
插入和删除:非常快速,特别是当需要在列表中间插入或删除元素时,操作是
O(1),前提是已经拥有指向待插入或删除元素的迭代器。
-
元素访问:
- 内存管理:由于元素间通过指针链接,内存分配可能更分散,但插入和删除操作不需要移动其他元素。
- 使用场景
-
std::vector:- 当你需要快速随机访问元素时。
- 当你需要在末尾快速添加或删除元素时。
- 当你关心内存使用效率时。
-
std::list:- 当你需要在列表中间高效地插入或删除元素时。
- 当你不需要随机访问元素时。
- 当你需要一个灵活的容器,可以动态地添加和删除元素而不会引起大量的内存复制或移动。