【STL】容器与适配器(10)

容器

容器用来管理一组泛型的元素。暂且可以理解为具有特殊 “功能”  的 “特殊数组”。数组体现出集合的特点,特殊功能是指在绑定了一些通用的算法。

常用的几个容器的特点: 

­ 容器的分类
序列式容器( Sequence containers) ­ 每个元素都有固定位置,取决于插入时机和地点,和元素值无关。
­ vector、deque、list、stack、queue、priority_queue
关联式容器(Associated containers) ­ 元素位置取决于特定的排序准则,和插入顺序无关

        set、multiset、map、multimap

容器的特点

各种容器的特点:

序列式容器

vector:  可以随机存取元素(动态数组,连续存储用索引直接存取),尾部添加移除元素非常快速。但是在中部或头部安插元素比较费时。(单向)

deque:  双向队列,可以随机存取元素(用索引直接存取),头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时。(双向)

list:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n))。在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针。

stack,queue,priority_queue: 分别是栈、队列、优先队列,应该称为“适配器”  —— 实际使用的是上面三种容器,但是屏蔽或者添加了一些操作, 底层实现还是使用上面的三种容器。

1 stack 堆栈适配器 ( 底层实现可用的容器类型 vector deque list)默认是deque
2 queue 队列适配器 ( 底层实现可用的容器类型 deque list)默认的容器是deque,vector不支持“前出” 操作
3 priority_queue 优先级队列 ( 底层实现可用的容器类型 deque vector)默认是vector

所谓底层默认实现是指在定义适配器的时候,不指定底层实现(少一个参数)。如果需要特定的底层实现,当然则定义适配器时,需要多一个参数。

关联式容器

­set/multiset:内部的元素依据其值自动排序,set内的相同数值的元素只能出现一次,multiset内可包含多个数值相同的元素。内部由二叉树实现,便于查找。

map/multimap:map的元素是键值/实值(k-v),内部的元素依据其值自动排序。map内的相同数值的元素只能出现一次,multimap内可包含多个数值相同的元素。内部由二叉树实现,便于查找。

与序列式容器的最大区别是:关联式容器采用非线性结构的树来实现。存放的是key-value队(set底层也使用k-v方式来存放数据),在数据检索时比序列式容器效率更高。其中multi可以理解为允许key的重复。

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值