关于stl advance函数移动步数超过容器大小(越界)的研究

今天使用advance遇到个问题,当advance移动步数超过容器大小时,表现的结果居然不一样。

  

 
再来看下stl源码

  template<typename _BidirectionalIterator, typename _Distance>
    inline void
    __advance(_BidirectionalIterator& __i, _Distance __n,
          bidirectional_iterator_tag)
    {
      // concept requirements
      __glibcxx_function_requires(_BidirectionalIteratorConcept<
                  _BidirectionalIterator>)
      if (__n > 0)
        while (__n--)
      ++__i;
      else
        while (__n++)
      --__i;
    }
 

由此可知,advance函数在操作迭代器时,并没有检查与容器大小,所以要求程序员自己事先考虑越界的情况,以免出现错误

 

posted on 2015-11-20 16:19  zyz913614263  阅读(509)  评论(0编辑  收藏  举报

导航