迭代器iterator和traits编程技法

前言

最近研究SGI-STL-v2.91源码,并尝试提炼核心代码自己实现,感觉受益颇深。但感觉有必要写一些文章记录一些学习的思考和总结,正因如此,行文会大量参考后捷的《STL源码剖析》的内容和一些优秀博文的内容。

迭代器概述

迭代器定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而无需暴露该聚合物的内部表述方式。

STL的中心思想在于:将数据容器和算法分开,彼此独立设计,让后再以一贴胶着剂撮合在一起。在STL实现中,迭代器就扮演着胶着剂的作用。迭代器是一种类似指针的对象,而指针的各种行为中最常见也是最重要的便是解引用和成员访问,因此迭代器最要的编程工作就是对operator*和operator->进行重载工作。

泛型编程和面向对象编程

认识迭代器之前我觉得有必要了解一下C++中两个非常重要的编程范式,即GP(泛型编程)OOP(面向对象编程)。

泛型编程:亦称为"静态多态",多种数据类型在同一种算法或者结构上皆可操作,其效率与针对某特定数据类型而设计的算法或者结构相同, 具体数据类型在编译期确定,编译器承担更多,代码执行效率高。在STL中利用GP将methods和datas实现了分而治之。

面向对象编程:将methods和datas关联到一起 ,也就是说方法和成员变量放到一个类中实现,通过继承的方式,利用虚函数表(virtual)实现运行时类型判定,也叫"动态多态", 由于运行过程中需根据类型去检索虚函数表,因此效率相对较低。

STL实现全部采用泛型编程,因此,相对来说STL的实现效率较高且易于维护。

迭代器分类

猜你喜欢

转载自www.cnblogs.com/evenleee/p/11651175.html