• 【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的重复。

     


     

  • 相关阅读:
    微软正式发布开源应用平台 Radius平台
    DSPE-PEG-Silane,DSPE-PEG-SIL,磷脂-聚乙二醇-硅烷修饰活性基团
    DAY51
    HIVE及SparkSQL优化经验
    嫌学校软件太烂,父母做了开源APP,却被官方报警
    【网页设计】HTML+CSS保护野生动物北极熊介绍网页设计专题
    Spring Security进行权限控制
    图解 LeetCode 算法汇总——链表
    c++编程(18)——deque的模拟实现(2)容器篇
    什么是 Cooke、Session 和 Token?
  • 原文地址:https://blog.csdn.net/yixiaobo2001/article/details/127731683