C++ STL 反向迭代器rbegin()和end()到底指向了容器的哪里?

C++ STL中为我们提供了很方便的迭代器——反向迭代器,其功能是:对reverse_iterator执行递增操作将导致指向数据的指针被递减。为什么不直接对常规迭代器进行递减呢?主要原因是为了简化对已有的函数的使用。假设要反向显示dice容器的内容,可以使用copy()和ostream_iterator来将内容复制到输出流中:

ostream_iterator<int, char> out_iter(cout, " ");
copy(dice.rbegin(), dice.rend(), out_iter); // display in reverse order

rebegin()和end()返回相同的值(超尾),但类型不同(reverse_iterator和iterator)。同样,rend()和begin()也返回相同的值(指向第一个元素的迭代器),但类型不同。

假设rp是一个被初始化为dice.rbegin()的反转指针。那么*rp是什么呢?

  1. 因为rebegin()返回超尾,所以不能对该地址进行解引用。
  2. 同样,如果rend()是第一个元素的位置,则copy()将会提早一个位置停止,因为区间的结尾处不包括在区间中。

反向指针通过先递减,在解除引用解决了这两个问题。即 * rp将在 * rp的当前值之前对迭代器执行解除引用。也就是说,如果rp指向位置6,则* rp将是位置5的值,以此类推。

以上内容摘自《C++ Primer Plus》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值