c/c++知识点总结5

今天来简单介绍一下STL的简单实现,虽然平时对于STL的应用很多,但是很多时候对于其底层的一些情况并不是十分清楚,今天就我对STL的一些简单认知做了一个梳理,希望大家批评指正:

对于几种常用STL的底层实现简单描述一下:

向量容器vector    查询时间复杂度为O(1)                内存结构数组
                尾部插入和删除时间复杂度O(1)
                头部插入和删除的代价较高
                
                特点:内存可两倍增长的动态数组,
                数据结构:线性连续空间
                注:动态增加的空间并不是在原空间的基础上添加一段新的内存空间,而是重新分配一段连续的内存空间,新空间是原空间大小的两倍
                
双端队列deque    尾部和头部插入和删除的                链表
                时间复杂度都为O(1)
                
                特点:其数据结构是一种双向开口的存储空间分段连续的数据结构,每段数据空间的内部是连续的,但是每段数据空间不一定连续
                注:与vector的区别:1.允许在常数时间内对其首尾端进行插入和删除
                                    2.因为其数据结构的特性,因此不存在空间的不足,若空间不足只需要在链接一段新的数据空间即可
                
双向链表list    对任意位置元素的插入和删除            双端数组
                时间复杂度都为O(1)
                查询元素的代价较高
                
                特点:其数据结构是一种双向的环状链表
                插入和接合都不会对原来的list迭代器造成失效
                删除操作也仅仅是”指向被删除元素“的迭代器失效,其他的迭代器不受影响
                因此也就导致,随机访问会很慢
                
集合set            由节点组成的红黑树,每个节            二叉树
                点都包含着一个元素,具有
                快速查找的能力,但他是以
                牺牲插入和删除的效率为代价的
                
                底层使用平衡的搜索树,红黑树实现
                set中的元素都是随机的,并且还会存在默认的升序和降序
                set中的内部以键值对的方式存储,只不过键和值是相同的而已
                
映射map            由{键,值}对组成的组合,            二叉树
                以某种作用于键对上的谓词排列,
                具有快速查找的能力
                
                特点:map中的Key是唯一的
                数据结构:是由红黑树变体的平衡二叉树数据结构
                提供基于Key的快速检索能力
                元素插入是按照排序规则插入的,不能指定位置插入
                对于迭代器来说能修改实际值,不能修改键值
                根据Key快速查找值的时间复杂度是O(log2n)
                
                注:map中的键值为一,不可重复,通过Insert的返回值Bool类型,可以判断出是否插入成功
                例子:insert(make_pair(int,int)) 此种方法即可判断
                

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值