iterator_category对于算法的影响_一个博客id_新浪博客


实际上我们的容器对于算法是不可见的,也就是说算法看不见容器这个东西,也不知道容器中到底装的什么什么类型的东西,不知道该怎么遍历这个容器,更不知道以哪种方式来对容器中的元素进行比较等操作。

1.算法不需要直接对容器进行操作。我们都是通过迭代器来访问的,至于到底是挨个访问呢还是可以跳动的访问呢,那就取决于迭代器的类型,这就是观点一:迭代器类型也决定了算法的不同的设计。
2.至于算法通过不同的迭代器做什么操作,比较大小?逻辑运算?一般我们可以通过仿函数告诉算法。不仅()运算符重载可以作为比较的规则,有时我们也可以直接将一个全局函数的地址传给算法,


在这里举个简单的一个算法的例子:
distance():求出俩个迭代器之间的距离(即节点的个数)

这是暴漏给用户的接口:
template
inline   iterator_trais ::different_type     distance( inputiterator first,inputiterator last)
//红色部分:用萃取机将迭代器间距离的类型转换出来,作为函数的返回值的类型
{
      iterator_trais ::iterator_category   category;
      //算法一进来也是用萃取机将迭代器的类型萃取出来,然后通过参数类型的匹配,决定调用哪个函数
     return    _distance (first   ,   last   ,   category());      
}
STL库针对上面的distance()  根据迭代器类型的不同算法版本:

版本1:针对随机迭代器
_distance(randomaccessiterator   first,
                randomaccessiterator   last,
                random_access_iterator_tag)
{
   return   last - first;
}
版本2:针对普通迭代器(只能一步一步走,不能跳)
_distance(inputiterator   first,
                inputiterator   last,
                input_iterator_tag)
{
      iterator_traist::difference_type n =0;
      //萃取出迭代器间距离的类型并定义b变量记录着first到last的步数
      while(first!=last)
      {
         ++first;
         ++n;
      }
      return n;
}



再来理解一下copy()中迭代器类型对于算法的影响:
函数原型:
copy(inputiterator   first,
         inputiterator   last,
         outpuriterator   result)  //将first到last之间的数据拷贝到result开头的内存中去
以下是copy函数的实现的流程:
iterator_category对于算法的影响





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值