STL迭代器(二)

来源:互联网 发布:学编程有什么好书 编辑:程序博客网 时间:2024/06/06 13:03

   这是SGI STL迭代器学习的第二部分,上一部分我对整个STL迭代器做了一些学习,知道了什么叫迭代器,什么叫traits编程技术,算是对迭代器有了一个整体上的认识,那么在这一部分中,我想要深入一点,了解一些本质上的东西,并且期望做到整体把握迭代器的设计原理与方法。

   指针(原生)是一种特殊的迭代器,因为它可以达到迭代器一样的功能,反过来,迭代器是一种指针,这样对吗?

   确实,迭代器就是一种指针,只是这个指针不需要我们管理内存,也就是不会造成内存泄漏问题,据《STL源码剖析》中说“迭代器是一种智能指针”,那我们去了解一下什么叫做智能指针(auto_ptr)吧。

   在文件“memory”中,可以找到auto_ptr的详细实现,纵观整个文件,我们发现文件很小,只是对原生指针做了一些包装而。我们知道迭代器的功能是访问元素就可以了,至于它是怎么访问到元素的,就需要看看traits编程了。

   上一节也说了traits编程,打包在这一节中,将带入例子来说明traits编程技术的威力。

   我们说,traits就像一个特性萃取机,将给他的对象的相应型别辨别出来,为了可以在原生指针上用traits,我们用了偏特化版本,加上模板的类型推导机制,可以实现相应型别的辨别。

   如果可以将任意一个对象的型别辨别出来,我们能干嘛呢?在c++语言里面,能将一个对象的型别辨别出来,是一种思想上的进步,有了对象的相应特性,我们就可以根据对象的特性来对对象的某些操作进行优化。因为我们已经知道了它有什么特性,就不需要保守了,可以最大限度的进行优化处理。

   在SGI STL里面,除了iterator_traits以外,还有一个__type_traits,顾名思义,前一个负责萃取迭代器的特性,而后一个则负责萃取型别的特性,也就是一个类型具有哪些特性。我们可以在文件type_traits.h中找到整个__type_traits的面容。在本文的末尾,也将贴出这个文件,下面,我们来分析一下在空间配置器一章中没有提及的一个文件,也就是全局辅助函数文件

“stl_unintialized.h”.这个文件这个文件非常重要,所以有必要重点看一下。

  简单来讲,就是依赖__type_traits来判断该用什么函数来做一件事情。

   至此,发现很多问题没有办法理解,但应该要往前学了,学习一个容器的具体实现,应该就可以找到这些组建之间关系的门路了。好吧,下面就要开始学习vector了,通过学习他来将前面的内容串起来,但还是会回来再次理解前面的内容的,空间配置器和迭代器是我觉得最难的,后面应该就会好一点。

 

 

 

 

0 0
原创粉丝点击