20170315STL03_STL概述

STL:

1:STL是C++里面的组件,也是C++里面非常重要的一部分。
2:STL就是正对泛型程序设计的思想设计出来的。
3:任何一个C++编译器都对STL进行了实现。
4:不会用STL就相当于不会C++。

泛型程序设计:

特点:
    1:程序尽可能通用(有了面向对象,泛型)
    2:将算法从数据结构中抽象出来,成为通用的算法(比如冒泡排序只针对数字)。

STL是什么(做了什么):

1:包含常用的数据结构(例如数组,二叉树,列表……)。
2:包含常用的基本算法
3:提供了一套可扩展框架(可扩展的泛型编程的框架,基于数据结构和算法的框架)

STL六大组件:


1:容器:

    1:vector:可变长数组。
        1:数组是连续的空间,这种数据结构就称之为数组。
        2:这样存储数据的好处在于是有序的,我们可以随机访问(想访问下标是多少的就可以访问到)。数组的随机访问速度是最快的。
        3:O1代表时间复杂度(我要几步操作才能达到我们想要的结果。),O1代表一步到位,O2代表两步到位。数组的插入复杂度是On(需要n步)。
        4:数组后面添加元素就是O1,很快,最后面删除也是O1,但是在中间插入和删除就会编的很慢,他的特点是访问和添加快,中间的操作的时候就变得非常慢。
        5:vector只是使用了一些技术使之看起来可变长,但它实际还是一个数组。vector的变长是非常复杂的,是On。如果是使用的大量数据,最开始就最好分配足够的空间。不认要分配很多次,很麻烦。
    2:deque:双端队列
        1:他也是使用数组来完成的,但他和vector是不一样的,vector是一维数组,deque里面有一个map(认为是初始化的一个数组,装的是指针,指向其他数组的首地址),通过这种方式实现双端队列,这使得往前增加还是往后增加时间复杂度都是O1。他也是有序的,也可以做随机访问(这种随机访问并不是O1,至少O3以上)。
        2:deque的访问相对于vector是非常慢的,但相对于list还是会快一些。
    3:list:列表:
        1:列表分为单向列表和双向列表(不同STL版本的可能不一样,但大多都是用的双向列表)
        2:列表里面每一个节点都有一个next,最后一个元素的next为空,列表的访问时间复杂度就是On的。必须挨个访问。
        3:好处在于他的数据插入和删除是特别快的,删除最快(O1)。但是访问是非常慢的。他的作用就是拿来插入和删除用的。
        4:双向列表,就是每个节点既有next也有back,相互指向。
        5:双向环形列表:最开始的一个节点的back和最后一个元素的next相互指向,形成环形的结构,称之为双向环形列表。
注意:上面三种(vector,deque,list 都是有序的,称之为序列式容器,下面几种(set,multiset,map,multimap)称之为关联式容器(都是通过二叉树实现的)。
    选择原则:
        1:频繁地插入和删除,不用再序列内部长距离调转应该选择list。
        2:在vector头部和中部插入删除效率低,在尾部插入删除效率高。
        3:deque在头部和尾部插入与删除效率高,世纪访问速度比vector低(一般用的少)。
二叉树:二叉树分为有序树(每个节点都是按大小排列的,比原来节点数小的在左,大的在右(这样可能出现单支的现象))和无序树。红黑树用的比较多(他会将顺序打乱),他保证支节平衡。
    二叉树是用来做搜索的,这种结构非常适合做二分法。二分法是搜索最快的方法。
    4:set:通过序列号来随机访问当中i的元素。
    5:multiset:里面的序号不能重复
    6:map:通过key和value来访问。
    7:multimap:里面的key不能重复

2:适配器:

    1:适配器是用来改变容器,迭代器或者函数对象接口的组件
    2:分类:
        1:容器适配器:stack等。
            1:栈:
            2:队列:
            3:优先队列:
        2:迭代器适配器:
            1:反向迭代器:
            2:插入迭代器:
            3:IO迭代器:
        3:函数适配器:
            1:函数对象适配器:
            2:成员函数适配器:
            3:普通函数适配器:
    3:适配器并不是相当于一个派生类,适配器做的远不止添加东西,也可以屏蔽一些接口,他是一个全新的类,它可以在另一个类之上进行一些修改。

3:算法:

    1:算法头文件:<algorithm>。里面包含STL里面所有的算法,它可以作用于我们任何一个容器上面(因为有迭代器的存在)。

4:迭代器(smart point):

    1:相当于一个小型智能的指针,用于链接我们的容器和算法(把容器里面的元素抽象成迭代器,算法操作迭代器)。
    2:正是有迭代器,才使得我们的算法可以通用。

5:函数对象:

    1:实现一些可扩展的功能

6:分配器:

    1:实现一些可扩展的功能



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值