现在的位置: 首页 > 综合 > 正文

STL

2017年08月20日 ⁄ 综合 ⁄ 共 1530字 ⁄ 字号 评论关闭

对下面这个教程的总结

http://net.pku.edu.cn/~yhf/UsingSTL.htm

1、STL的特点是将数据结构和算法分离开来,STL算法作为模板函数提供,STL组件是另外一个定义,STL不是面向对象的,它依赖与模板而不是封装、继承和多态性,这是OOP三个要素。STL的算法基于模板的,所有函数几乎完全通用,不依赖于特定的数据类型。

2、STL三个基本组件:迭代器,如同指针;容器是一种数据结构;算法是用来操作容器中的数据的模板函数。

3、STL的头文件不再包含.h这样的文件,命名空间,using namespace std   这句话是为了冲突的,标志符只在名字空间中存在,因而避免了和其他标志符冲突,find()函数

find(iarray,iarray + SIZE ,Value)   iarray+size 是指最后一个元素的后面位置,等同于past-the-end 值。

4、容器迭代器,vector<int>::iterator  intIter = find( intVector.begin(), intVector.end(), value)

      输出迭代器 copy()   前推迭代器 replace()    双向迭代器 reverse() 随机访问迭代器  random_shuffle()  随机打乱原先的顺序。

5、迭代器技术 流和迭代器   将输入/输出流作为容器看待,   copy ( v.begin(), v.end(), ostream_iterator<int> ( cout ,"\t"))  模板类  ostream_iterator      一个ostream对象和一个string值  插入迭代器  用于将值插入到容器中,也叫做适配器 ,  三种插入迭代器:inserters  ,对象插入到容器任何对象的前面  front_inserters  将对象插入到数据集的前面   back_inserters 
数据集后面  第一个和第二个的区别? 混合迭代器函数  advance()  按指定的数目增减迭代器   distance() 返回到达一个迭代器所需操作的数目 。

6、函数和断言

对容器中的数据进行用户自定义的操作,例如,你可能希望遍历一个容器中所有对象的STL算法能够回调自己的函数。

给了一个例子,里面有for_each(v.begin(), v.end(). initialize)  后面的函数便是自己定义的函数名。  find_if ( v,begin(), v.end(), isMinus)  后面的这个是个返回bool的函数   上面都是调用断言 函数的例子 

函数对象  ,给STL算法传递一个类对象以便执行更复杂的操作,这样的一个对象称之为 函数对象, accumulate(v.begin(), v.end(). 1, multiplies<long>())   multiplies 作为固定的类对象。  accumulate 用来计算范围内所有值的和, 也可用来作为函数对象作乘法。

7、发生器 函数类对象  这类函数有自己的内存,能够从先前的调用中记住一个值,如随机数发生器函数,  我们平常一般用静态或全局变量记忆上次调用的结果,这样的缺点是函数和数据不能够分离,并要用TLS才能线程安全??想法是 使用类来封装一块“内存“更安全可靠。 random_shuffel()

发生器函数类对象的使用

绑定器函数

否定函数对象  TBC

上面三部分有空再具体看,例子应该敲一遍。

8、小结

使用STL,标准模板库,更为安全更为灵活,其最大特点是 数据结构和算法的分离,访问对象是通过像指针一样的迭代器实现的,容器是像链表,矢量之类的数据结构,并按模板方式提供,算法是函数模板,用于操作容器中的数据,STL以模板为基础,因而可用以任何数据类型和结构。

【上篇】
【下篇】

抱歉!评论已关闭.