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了,通过学习他来将前面的内容串起来,但还是会回来再次理解前面的内容的,空间配置器和迭代器是我觉得最难的,后面应该就会好一点。
- STL迭代器(二)
- STL学习记录(二):迭代器简要
- c++ STL迭代器(二)
- STL学习(二)
- 学习STL(二)
- c++ STL(二)
- 82 stl(二)
- STL基础(二)
- STL迭代器简介之二
- STL之迭代器事例二
- STL学习笔记(二)
- 强大的STL(二)
- STL 快速入门(二)
- stl的complex(二)
- C++ STL容器(二)
- stl变易算法(二)
- STL内存管理(二)
- STL源码分析——迭代器(二)
- Android的5个进程等级
- 042期正版四字梅花诗:冰清一洁
- 文章标题
- Java的getClass()
- 【机器学习】简单感知器
- STL迭代器(二)
- 高质量函数C++,C语言设计--指针
- SQL on Hadoop TPCDS性能测试
- 有关Android Activity的面试题和答案
- 谷歌广告sdk—iOS版本
- LeetCode 240. Search a 2D Matrix II
- Java GUI:图形用户界面三剑客相比拼
- xcode中配置opencv: No member named 'clock_t' in the global namespace
- Vim与系统剪贴板交互方法