首页 > 移动平台 > 详细

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

时间:2015-11-20 16:53:59      阅读:336      评论:0      收藏:0      [点我收藏+]
今天使用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函数在操作迭代器时,并没有检查与容器大小,所以要求程序员自己事先考虑越界的情况,以免出现错误

 

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

原文:http://www.cnblogs.com/zendu/p/4981169.html

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