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以模板为基础,因而可用以任何数据类型和结构。