STL源码解读

    之前一直都是会在开发中应用STL,大部分都是用到STL的容器,虽然STL在开发过程中有一些隐患,但是STL的思想和框架是值得学习和借鉴的,接下来一段时间计划好好的看下侯捷老师的STL源码剖析,旨在学会STL的设计思想,然后自己封装模板库,开发出适合自己项目的容器框架。

    要剖析STL就不得不提模板和运算符重载,可以说STL基本是通过模板和运算符重载实现的,我们知道继承和组合是对象重构的方法,那么模板就可以定义为代码重构的方法,通过模板我们可以设定类型参数,然后创建我们想要的模板类和模板函数。STL正是大量运用了模板的功能实现容器和算法以及其他一些组件。

   STL(Standard Template Library)标准模板库,它由六大组件组成,分别是:泛函,迭代器,容器,算法,空间管理器,适配器。

   先介绍下Iterator(迭代器)我们可以把迭代器理解为对象的高级指针,一个迭代器需含有以下成员函数:

      1,默认构造函数;即 Itr i;   合法

      2,拷贝构造函数和赋值运算符operator=,即 Itr i = j;合法     i = j ;合法

      3,判断相等和不相等的二元运算符operator==和operator!=

      4,重载取值运算符operator* 用来返回对迭代器所指向的元素的引用

      5,重载++运算符,可实现迭代器指向元素的移动

   根据迭代器操作的级别可将其分为:

          输入迭代器:所指向的元素只能被读取而不能被写入

          输出迭代器:

          向前迭代器:

          双向迭代器:

          随机存取迭代器:

一般开发人员自己写迭代器只要写成向前迭代器就行了,而STL实现的是双向迭代器。

我们将没有分配空间或者已经释放空间的指针称为奇异指针,将指向空间不可知的指针称为不可溯源指针。

STL均是用一个合法的半开半闭区间来为算法提供输入数据的,即[first,last),其中last就是不可溯源的,因此在使用迭代器访问容器的时候要谨慎当iter指向last时,此时iter所指向的元素已经不可控。

你可能感兴趣的:(STL源码解读)