21 STL(一)一一初识

2021-01-03  本文已影响0人  ca8519be679b

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

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

为了提供数据结构和算法的一套标准(防止重复造轮子),就有了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>的指针,需要解引用获得对象,然后再次遍历,如上的逻辑,将嵌套的容器进行输出

上一篇 下一篇

猜你喜欢

热点阅读