美文网首页
21 STL(一)一一初识

21 STL(一)一一初识

作者: ca8519be679b | 来源:发表于2021-01-03 21:53 被阅读0次

    长久以来,软件界一直希望解决重复使用的代码,将复用性提高,

    面向对象和泛型思想就是复用性提高的一种操作,

    为了提供数据结构和算法的一套标准(防止重复造轮子),就有了STL(标准模板库)

    STL广义上分为容器Container,算法Algorithm,迭代器Iterator

    容器和算法之间通过迭代器无缝连接,

    STL中几乎所有部分都用了类模板或者模板函数

    STL的六大组件,容器,算法,迭代器,仿函数,适配器(配接器),空间配置器

    1

    如上,可以看到对六大组件的功能描述介绍,其中仿函数就是我们之前说过的重载小括号的类,行为类似函数的调用。

    容器,将最广泛的数据结构实现出来,如数组,链表,树,栈,队列,集合,映射表

    如上容器可分为2种,一种叫做序列型容器,强调元素的固定位置,一种是关联性容器,元素间没有严格的顺序关系

    算法,就是解决问题的设计,算法分为质变算法和非质变算法,是按照元素的内容是否变化来算,如拷贝删除排序是质变,查找求极值等是非质变算法

    迭代器,算法通过迭代器来遍历容器,不同的容器有不同的迭代器

    2

    迭代器分为如上的5种,实际经常使用的迭代器为后两个,即双向迭代器和随机访问迭代器,

    容器简介

    STL最常用的容器就是Vector,也叫数组,算法for_each,迭代器vector<T>::iterator

    我们之前尝试过去自定义个array类型,这里vector可以存放特定类型,使用<>模板来指定类型,

    3

    如上,我们使用vector,要include导入,使用pust_back可以实现尾插。接下来就需要我们显示了,其实也涉及到迭代的过程,就是遍历,

    4

    如上,使用vector<int>::iterator迭代器来迭代,通过v的begin和end方法返回指针,注意,这里指针begin是指向第一个元素,而end是指向最后一个元素的后面,即不是实体元素,这样,我们就可以通过指针遍历,解引用来实现输出数组元素。上面是第一种while循环

    5

    第二种是使用for循环,也很好理解,还有一种for_each方法

    6

    如上,我们使用for_each要导入algorithm库,其中需要传入3个参数,前两个分别是头尾指针,最后传入的是个方法名,这个方法要额外定义,这里我们需要明确的是方法遍历的是vector的每一个元素,因此要有对应得参数int val,效果如上

    7

    我们可以查看for_each的内容,里面本质还是for循环然后每个元素去调用方法

    同样,我们还可以给vector使用自定义数据类型

    8

    使用嵌套容器

    嵌套容器就像二维数组一样,我们要使用2层for循环访问,我们如下示范下

    9

    如上,我们要使用2层for循环,我们使用迭代器遍历,我们知道,迭代器<>里面的类型是对象,it就是个vector<int>的指针,需要解引用获得对象,然后再次遍历,如上的逻辑,将嵌套的容器进行输出

    相关文章

      网友评论

          本文标题:21 STL(一)一一初识

          本文链接:https://www.haomeiwen.com/subject/yrmpoktx.html