迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。
从实现的角度来看,迭代器是一种将 operator*
,operator->
,operator++
,operator--
等指针相关操作予以重载的 class template。 所有 STL 容器都附带有自己专属的迭代器。 native pointer 也是一种迭代器。
为什么每一种 STL 容器都提供有专属迭代器?主要是暴露太多细节,所以把迭代器的开发工作交给容器去完成,这样所有实现细节可以得到封装,不被使用者看到。
迭代器所指的对象类型有五种:
tempalte<typename I>
struct iterator_traits
{
typedef typename I::iterator_category iterator_category; //迭代器的分类
typedef typename I::value_type value_type; //迭代器所指对象的型别
typedef typename I::difference_type difference_type; //两迭代器之间的距离
typedef typename I::pointer pointer; //指针,指向迭代器所指之物
typedef typename I::reference reference; //类似引用类型,允许改变“所指对象的值”
};
traits 本质是什么?多一层间接性,换来灵活性。
iterator_traits 负责萃取迭代器的特性,__type_traits 负责萃取类型的特性。
STL的中心思想是将数据容器与算法分开,彼此独立设计。迭代器便作为连接两者的“桥梁”,统一访问不同容器时的访问方式,并将实际细节封装,不被使用者看到。
原文:https://www.cnblogs.com/jakelin/p/14324759.html