reverse_iterator

stl 容器大都有 reverse_iterator, 用法跟 iterator 一样。然而,可能很少有人考虑过它的实现。

首先, reverse_iterator 大都由 std::reverse_iterator 包装 iterator 生成,如此,同样的遍历循环,reverse_iterator 在每个循环中要调用两次 iterator.operator–, 一次是 reverse_iterator::operator++, 一次是 reverse_iterator::operator*, reverse_iterator 的关键代码大致如下:

如果不用 reverse_iterator, 如何反向遍历一个序列呢?

这样的反向遍历,每个循环只调用一次 BidirectIter::operator–, 比使用 reverse_iterator 的 for_each 更高效,除非编译器智能到可以消除那次多余的 operator–

然而这样的代码在极少数情况下也有问题,比如某个容器的 reverse_iterator 不是用 std::reverse_iterator 实现的,并且当正向 iterator 达到 end() 时就不能再调用 operator– 回到上一个。febird::trbmap 就是这样一个例子,也许febird::trbmap在将来会修正这一点。

 


作者:
该日志由 csdn-whinah 于2011年10月15日发表在C++分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: reverse_iterator
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

1 个回复

发表评论

您必须 登录 后才能发表评论。