繁体   English   中英

反向迭代器未按预期工作

[英]Reverse Iterator not working as expected

我在std::vector上使用反向迭代器并根据以下链接:

http://www.cplusplus.com/reference/stl/vector/rbegin/

myVector.rbegin()是向量的最后一个元素。 在我的例子中,我实际上是在rbegin()上获得了past the end迭代器和来自rend()第一个元素。 我本来期望rend()给我past the end迭代器和rbegin()来给我容器中的最后一个元素。 我完全理解错了吗?

以下是我的代码,没什么特别的。 我在分配之后设置了一个断点,上面是我在调试器中得到的结果( VecDebugCubesstd::vector<myStructure>的类型定义)

VecDebugCubes::reverse_iterator itr    = pActiveDebugCubes.rbegin();
VecDebugCubes::reverse_iterator itrEnd = pActiveDebugCubes.rend();
while (itr != itrEnd)
{
  (*itr)->printDebugValues();
  ++itr;
}

访问http://www.cplusplus.com/reference/std/iterator/reverse_iterator/base/

取消引用反向迭代器将返回与您在调试器中看到的值不同的值。

rbegin()的结尾和rend()的第一个元素是迭代器的工作方式。 这就是为什么它被称为反向迭代器。 它的设计使你可以在for循环中使用它,而不必担心错误的范围的起点和终点。 你会注意到一个简单的i ++可以用于迭代器,而迭代器实际上是在范围上向后迭代。 我想你需要知道的是,它应该如何工作。 没有错。 它只会让你的生活变得更轻松,因为你在写作时不太可能犯错误(i = beginAtTheEnd完成启动和减少 - 我在同样的方式中作为i ++)而不是(i = 10) ; i> 0; i--) ,你可能会错误地将i <0i> 1置于条件中。 这是一个简化的例子。 当你想在容器上反向迭代时,你会更加欣赏它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM