长久以来,软件界一直希望解决重复使用的代码,将复用性提高,
面向对象和泛型思想就是复用性提高的一种操作,
为了提供数据结构和算法的一套标准(防止重复造轮子),就有了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>的指针,需要解引用获得对象,然后再次遍历,如上的逻辑,将嵌套的容器进行输出
网友评论