对于使用C++语言进行项目开发的同学,STL必然是必须掌握并且熟练的技术。除了能够熟练使用,我们当然也有必要知道其内部实现原理。当然,对于新手或者并属于一线开发者的同学,一下子看懂STL源码是不现实的,但是我们可以从简单的地方入手,慢慢去了解掌握它。下面我就总结一些最基本的细节。
STL的构成
大部分人可能知道STL包括容器,迭代器,算法。其实,STL还包括比较重要的函数对象,适配器,内存分配器,概念和模型。这里分别挑重点说一下。
函数对象(Function Object)
先说函数对象吧,哈哈。在C++中我们知道函数指针,它将具有相同类型和个数的输入参数和返回值的一组函数抽象出来。这为代码灵活性做出来贡献。但是在STL中,我们使用函数对象而不是函数指针——这其实也是C++高级特性中的一贯做法,将指针封装成一个对象去使用。迭代器啦,智能指针啦,都是这样子的。需要注意的一点是,为了使用上直观,我们需要重载函数对象的运算符(),这样当函数调用其()成员函数时,就好像还是在使用一个函数一样。
适配器(Adapter)
C++ STL中所谓的适配器,作用相当于一个类型转换。可以转换函数对象,迭代器,甚至是容器等。其实这是为了利用已有的代码或者数据结构泛化实现扩展的数据结构而已,因为好多STL的模块内部实现是差不多的。比如双参数的函数对象,可以通过赋予其中一个参数某个值,转换成单参数的函数对象;reverse_iterator迭代器是由iter