list浅谈

list浅谈

前言

  • 一般面试的时候很喜欢问到STL中的vector和list有什么区别, 所以这篇文章在讲list的时候会偶尔和vector进行一些对比

list概述

  • list和vector不同, vector是连续的线性空间, vector的插入和删除元素伴随着大量的元素移动, 无法做到常数时间复杂度
  • list是一个环状双向链表, 对于链表的操作大家都清楚,在存储空间中不一定是连续存在的,插入和删除元素的时间可以做到常数级别

list迭代器

  • vector的迭代器是重载实现了+, +=等符号的
  • list有++, --, 但是没有实现+, +=, 这点需要注意
  • vector在插入元素的时候有可能会导致空间的重新配置, 原来的迭代器会有可能会失效
  • 但是list的插入操作不会导致迭代器的失效, 这也是list和vector的另一个区别所在

list方法

  • vector没有push_front(), pop_front()等方法, list是有的
  • list和vector一样都是用insert实现push_xxx操作的
  • list之中具有很多vector之中没有的方法, 比方说merge等等
  • list之中无法使用泛型算法之中的sort, 即algorithm之中的sort方法, 因为algorithm的sort只能接收RandomAccessIterator, 所以list自己内部实现了sort方法
  • vector可以使用algorithm之中的sort方法

备注

  • list之中的merge方法可以在这个面试题 —— 合并2个递增链表 —— 之中起到很好的功效
  • 使用方法是: 先调用sort, 再调用merge, 这样链表就成功合并好了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值