C++ STL【容器篇1】

       众所周知,C++STL最重要的部分就是它的容器和算法,本人之前本科阶段学习过VB,C语言以及汇编语言,这些东西可以说都是计算机语言较为好理解的,而到了研究生阶段,开始学习C++,它的强大也意味着它的多元性与复杂性,但是也更是有着更多地神奇之处。尤其是学到STL时更是发现他的强大与便利之处,和其它语言不一样,C++中处理容器是采用模板的模式,C++库中容器提供了许多种的数据结构,这些数据结构与标准算法一起配合工作为软件开发提供了很好的支持。本篇文章是作者学习STL一个阶段之后的总结与回顾,可供大致梳理与了解,毕竟C++内容,与相关所涵盖的东西颇为丰富,需要慢慢将其蚕食,不积跬步无以至千里。

    首先,容器分为三大类,顺序性容器和关联式容器以及容器适配器。

    顺序性容器  它是一种各元素之间的顺序关系线性表,是一种线性结构的可序的集群,每个元素都有他们固定的位置,除非插入或者删除的操作会改变这个位置。并且这个位置和元素本身无关,和和操作的时间和地点有关,顺序性容器是不会根据元素的特点排序,而是保存了操作时的逻辑顺序。

   关联式容器  它和顺序性容器不同,关联式容器是非线性的树结构,更准确的说是二叉树结构。各元素之间没有严格物理上的顺序关系,也就是说元素在容器中没有保存元素置入容器时的逻辑顺序,但是它可以根据元素的特点来排序,另一个特点是可以以键值的方式来保存数据(map)。

   容器适配器  抽象解释是使一事物类似于另一种事物的行为的一种机制。它是让已经存在的一种容器用另一种不同的抽象类型的工作方式来工作,相当于发生了接口的转换。可以解释为容器的容器。

   具体容器类:

   顺序性容器:

    vector:它确切的说是一个类,相当于一个动态数组,当程序员无法知道自己需要的数组规模多大时,可以用它来解决问题以达到最大节约空间的目的。

       list : 它表示双向链表。除了第一个和最后一个元素外,每个元素前后的元素相互链接,这意味着它可以双向遍历链表,list在任意位置的插入和删除时间都是固定的,而vector只有在结尾处是固定的,其它时间都是线性的。因此vector强调的是通过随机访问进行快速的访问,而list强调元素的快速插入和删除。

     deque:它表示双端队列(double-ended queue),咋STL中,它的实现类似于vector容器,支持随机的访问。主要区别在于从它的对象开始位置插入和删除的元素时间是固定的,不像vector是线性的,所以如果多数操作发生在序列的其实和结尾处,应该考虑用deque结构。

   关联式容器:

         set:它实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左边的而小于右边的,还保证根节点左子树与右子树高度相等。并且每个数据的值是唯一的,如果想要存储重复的可以用multiset。如果迭代器所指向的元素被删除,则该迭代器失效,任何其他增加删除操作不会影响迭代器。最大优点是可以实现快速查找。并且在元素插入时会实现自动排序。

   multiset:排列和访问插入特点同set,区别在于它允许元素的重复。

        map:它也是用二叉树查找,它实现了键值(key)与对应的value的映射,二叉树根据key的值进行排列,而它不允许key的重复。

   multimap:它允许key的重复,其他同map。

   容器适配器:

    stack:它相当于一个容器的改编,实现了一个先进后出的数据结构。

   queue:它可以将任意一个容器变成一个队列,一般使用deque作为支持的序列容器,元素只能先进先出。不能遍历整个queue,它只有两端可以操作。

   priority_queue:最高优先级元素总是第一个出列。

  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值