首页 > 其他 > 详细

STL源码剖析-迭代器-iterators

时间:2021-01-25 14:17:51      阅读:25      评论:0      收藏:0      [点我收藏+]

迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。

从实现的角度来看,迭代器是一种将 operator*operator->operator++operator-- 等指针相关操作予以重载的 class template。 所有 STL 容器都附带有自己专属的迭代器。 native pointer 也是一种迭代器。

为什么每一种 STL 容器都提供有专属迭代器?主要是暴露太多细节,所以把迭代器的开发工作交给容器去完成,这样所有实现细节可以得到封装,不被使用者看到。

Traits

技术分享图片

迭代器所指对象类型(associated types)

迭代器所指的对象类型有五种:

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;					//类似引用类型,允许改变“所指对象的值”
};

迭代器的分类

  1. Input Iterator :能从所指向元素读取的迭代器(只读)。仅保证单趟算法的合法性。
  2. Output Iterator :能写入所指元素的迭代器(只写)。
  3. Forward Iterator :一种能从所指向元素读取数据的迭代器 。
  4. Bidirectional Iterator:能双向移动(即自增与自减)的迭代器 。
  5. Random Access Iterator :随机读写,能在常数时间内移动到指向任何元素的双向迭代器。
技术分享图片

总结

traits 本质是什么?多一层间接性,换来灵活性。

iterator_traits 负责萃取迭代器的特性,__type_traits 负责萃取类型的特性。

STL的中心思想是将数据容器与算法分开,彼此独立设计。迭代器便作为连接两者的“桥梁”,统一访问不同容器时的访问方式,并将实际细节封装,不被使用者看到。

STL源码剖析-迭代器-iterators

原文:https://www.cnblogs.com/jakelin/p/14324759.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!