day22|C++重难点之 vector和list的区别、vector 底层原理和扩容过程

day22|C++重难点之 vector和list的区别、vector 底层原理和扩容过程

55.vector和list的区别

1.vector

  • 动态数组:基于动态扩展的数组实现,这说明 它在内存中 连续存储 元素
  • 随机访问:提供快速的随机访问的能力,可以通过 索引 快速访问任何元素
  • 内存分配:通常在内存中分配上 更紧凑,因为 元素紧密排列,没有 额外的空间 用于链接或指针
  • 时间复杂度
    • 元素访问:时间复杂度为O(1)
    • 插入和删除:在末尾是O(1);在中间的话,可能需要O(n),因为可能需要移动 后续所有的元素
  • 内存管理:因为使用连续内存分配,使用可以利用 缓存,提高 访问速度

2.list

  • 双向链表:基于双向链表的容器,每个元素通过指针 链接到前一个和后一个元素
  • 非连续存储:元素在内存中 不是连续存储的
  • 时间复杂度
    • 元素访问:O(n),因为需要从头开始 遍历到所需位置
    • 插入和删除:非常快速,在中间插入和删除的时候,依然是O(1),前提是已经拥有 指向 待插入或删除元素的 迭代器
  • 内存管理:由于元素之家通过指针链接,内存分配可能更加 分散,但插入和删除操作 不需要移动其他元素

3.使用场景

  • vector

    • 需要快速
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值